Что нового

Как задать стиль окну с широкой рамкой, с фиксированым размером

Сообщения
80
Репутация
-1
В Windows у всех программ широкая рамка, исключение только настройка подстветки в notepad++ , хотя она к ним отношения не имеет и скорее всего кривой код функции. (хотя подозреваю это невозможность самой винды)

В программе калькулятор тоже есть широкая рамка, но кнопка развернуть недоступна и размер фиксированый.

Тут предлагают стиль $WS_OVERLAPPEDWINDOW объединяющий $WS_OVERLAPPED, $WS_CAPTION, $WS_SYSMENU, $WS_THICKFRAME, $WS_MINIMIZEBOX, и $WS_MAXIMIZEBOX.
Хотя окно главное, $WS_POPUP вообще ничего не даёт, наверно он ненужен.

Убираю из этого $WS_MAXIMIZEBOX и получается
Код:
$WS_CAPTION, $WS_SYSMENU, $WS_SIZEBOX,$WS_POPUP, $WS_MINIMIZEBOX
в данном случае $WS_SYSMENU тоже ничего не делает.
Рамка получается широкая, но меняет размер, но если нет $WS_SIZEBOX или $WS_THICKFRAME она становится опять тонкой.

Мне что надо както потом надо блокировать смену размера окна ?

Код:
$hGUI = GUICreate($NameGUI & " " & $version & $nGUI,$WWidth,$WHeight,-1 ,-1, BitOR( $WS_CAPTION, $WS_SYSMENU, $WS_SIZEBOX,$WS_POPUP, $WS_MINIMIZEBOX))
GUICtrlSetResizing ( -1, BitOR($GUI_DOCKWIDTH,$GUI_DOCKHEIGHT) )

это не работает

AutoIt Window Info (x64) с калькулятора выдаёт такое, но толку с этого нет, просто на первой вкладке в окне ничего не прогружается если не зайти на другие, но стиль всё равно тонкий. Похоже дело не в стиле.
Title: Калькулятор
Class: CalcFrame
Style: 0x14CA0000
ExStyle: 0x00000100
 

InnI

AutoIT Гуру
Сообщения
4 329
Репутация
1 167
Стиль по умолчанию разве не то, что вам нужно?
Код:
GUICreate("")
GUISetState()
Do
Until GUIGetMsg() = -3
 
Автор
W
Сообщения
80
Репутация
-1
Вот как оно на самом деле

Оно всяко ровнее чем у этих(не смотря что стиль другой), но неужто широкую рамку никак.
Вот с одним этим стилем она широкая, но меняет размер
 

ra4o

Скриптер
Сообщения
1 031
Репутация
193
Автор имел в виду, что если применить стиль окна "$WS_THICKFRAME" то помимо возможности изменения размеров окна изменяется (становится больше) верхняя рамка окна
Код:
#include <windowsconstants.au3>
GUICreate("",Default,Default,Default,Default,$WS_THICKFRAME)
GUISetState()
Do
Until GUIGetMsg() = -3

ему необходима такая рамка, но без возможности изменения раззмеров окна.

Упс, пока писал ответ автор и сам всё объяснил :smile:
 
A

Alofa

Гость
ra4o сказал(а):
... но без возможности изменения раззмеров окна...
Ну так уберем эту возможность
Код:
#include <GuiMenu.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$hGui = GUICreate('', 400, 100, -1, -1, $WS_OVERLAPPEDWINDOW)
GUISetState()

_GUICtrlMenu_DeleteMenu(_GUICtrlMenu_GetSystemMenu($hGui), 2)
GUIRegisterMsg($WM_SETCURSOR, 'WM_SETCURSOR')

Do
Until GUIGetMsg() = -3

Func WM_SETCURSOR($hWnd, $Msg, $wParam, $lParam)
	If $wParam = $hGui Then
		Switch BitAND($lParam, 0xFFFF) ; _WinAPI_LoWord
			Case 10 To 18
				GUISetCursor(2)
		EndSwitch
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc

Этот костыль имеет смысл только на Win7 и ОС старее.
 
A

Alofa

Гость
OffTopic:
ra4o сказал(а):
... На Win10х64 работает!
На ней родимой и писал, только чтобы увидеть "широкую рамку" пришлось включать классическую тему оформления.
 

InnI

AutoIT Гуру
Сообщения
4 329
Репутация
1 167
ra4o [?]
ему необходима такая рамка, но без возможности изменения раззмеров окна
Так?
Код:
#include <windowsconstants.au3>
GUICreate("",Default,Default,Default,Default,BitXOR($WS_OVERLAPPEDWINDOW, $WS_THICKFRAME))
GUISetState()
Do
Until GUIGetMsg() = -3
 

InnI

AutoIT Гуру
Сообщения
4 329
Репутация
1 167
Да, действительно, в упрощённой теме рамка узкая :(
Ну, значит используем код Alofa :beer:
 

InnI

AutoIT Гуру
Сообщения
4 329
Репутация
1 167
Автор
W
Сообщения
80
Репутация
-1
Видимо только костыль подойдёт, но учитывая что эти виндовые функции очень нестабильные, сделаю возможность его отключать.
Хотя мог бы и напрягаться, видимо проблема в другом
 
A

Alofa

Гость
winix
Это вы сейчас сам с собой поговорили?


Добавлено:
Сообщение автоматически объединено:

Рамку, какую вам нужно вы можете сотворить и при помощи элементов GUI окна.
В Windows же широкие и узкие рамки как раз и предназначены для того чтобы визуально различать окна с возможностью изменения размера и без нее.


Добавлено:
Сообщение автоматически объединено:

OffTopic:
winix сказал(а):
... скорее всего кривой код функции...
И перестаньте пожалуйста делать поспешные выводы. Это я не только о этой фразе, а вообще о всех ваших темах.
Поверхностное изучение дает поверхностный результат.

P.s: уж извините не удержался.
 
Верх