Что нового

Сделать "прижимающийся" интерфейс

Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Yuriy
Спасибо, так намного лучше!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Yuriy [?]
У меня такой код вышел
Во-первых код нужно заключать в соответствующие теги, а во-вторых у меня с этим способом с правой стороны не видно бордюра окна. И вообще я не пойму, зачем нужно высчитывать бордюры, всё намного проще:

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$hParent_GUI = GUICreate("NSR-авто, v. 1.0", 222, 730, 269, 84, BitOR($WS_SYSMENU, $WS_CAPTION))

$aPos = WinGetPos($hParent_GUI)

$hChild_GUI = GUICreate("", 60, 18, $aPos[2] - 95, -23, $WS_POPUP, $WS_EX_MDICHILD, $hParent_GUI)
$hBt1 = GUICtrlCreateButton("<", 0, 0, 30, 18)
$hBt2 = GUICtrlCreateButton(">", 30, 0, 30, 18)

GUISetState(@SW_SHOW, $hChild_GUI)
GUISetState(@SW_SHOW, $hParent_GUI)

While 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $hBt1
			WinMove($hParent_GUI, "", 0, Default)
			WinActivate($hParent_GUI)
		Case $hBt2
			WinMove($hParent_GUI, "", @DesktopWidth - $aPos[2], Default)
			WinActivate($hParent_GUI)
	EndSwitch
WEnd
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
CreatoR
Про код знал, но забыл, отвлекся.
Уже исправил.
У меня тоже с этим способом с правой стороны не видно бордюра окна.
Про четвертый параметр Default как-то не знал, да и сейчас не понятно.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Re: Сделать \"прижимающийся\" интерфейс

Suppir [?]
Все равно есть зазор и кнопки не на месте стоят:
Видимо местоположение окна с кнопками надо уточнять вручную.

CreatoR [?]
а во-вторых у меня с этим способом с правой стороны не видно бордюра окна. И вообще я не пойму, зачем нужно высчитывать бордюры, всё намного проще

У меня без учета бордюры окно почему-то устанавливается так , что не видно крайней бордюры.

Окно с кнопками в твоем примере устанавливается правее и ниже необходимого.




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

Я поэтому и писал:
gregaz [?]
Правда малопонятно почему мне пришлось учитывать рамку,ведь $aPos[2] - это не клиентская часть
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
у CreatoR'а GUI работает как надо :smile: По крайней мере, на моем офисном мониторе.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
gregaz [?]
У меня без учета бордюры окно почему-то устанавливается так , что не видно крайней бордюры.
Скрин можно увидеть, странно это.

Окно с кнопками в твоем примере устанавливается правее и ниже необходимого
А вот это уже зависит от темы и размеров окна, тут как раз нужно высчитывать клиентскую часть:

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$hParent_GUI = GUICreate("NSR-авто, v. 1.0", 222, 730, 269, 84, BitOR($WS_SYSMENU, $WS_CAPTION))

$aWinPos = WinGetPos($hParent_GUI)
$aClientSize = WinGetClientSize($hParent_GUI)

$iBorderSize = $aWinPos[2] - $aClientSize[0]
$iCaptionSize = $aWinPos[3] - $aClientSize[1] - $iBorderSize

$hChild_GUI = GUICreate("", 50, 18, $aClientSize[0] - 90, -($iCaptionSize - ($iBorderSize / 2)), $WS_POPUP, $WS_EX_MDICHILD, $hParent_GUI)
$hBt1 = GUICtrlCreateButton("<", 0, 0, 25, 18)
$hBt2 = GUICtrlCreateButton(">", 25, 0, 25, 18)

GUISetState(@SW_SHOW, $hChild_GUI)
GUISetState(@SW_SHOW, $hParent_GUI)

While 1
    $nMsg = GUIGetMsg()
    
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $hBt1
            WinMove($hParent_GUI, "", 0, Default)
            WinActivate($hParent_GUI)
        Case $hBt2
            WinMove($hParent_GUI, "", @DesktopWidth - $aWinPos[2], Default)
            WinActivate($hParent_GUI)
    EndSwitch
WEnd


и что значит правее необходимого, у тебя кнопка закрытия такая широкая? :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
gregaz [?]
Тогда не знаю, нужно как то получить ширину и высоту (для совместимости кнопок "прижима") этой кнопки...
 
Верх