Что нового

[Окна, Диалоги] Создать окно без иконки, но с кнопкой "закрыть"

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Была такая тема, в ней создавали окно с пустым заголовком.
В моем случае требуется создать окно только с кнопкой закрыть и названием окна (без иконки, свертывания и максимизирования), т.е. как со стилем $WS_EX_TOOLWINDOW, но с полноразмерным заголовком.
Или эту иконку можно каким-то образом удалить?
То что есть:
Код:
#include <WindowsConstants.au3>
$hGui = GuiCreate('Test window', 250, 200, -1, -1, $WS_SYSMENU)
GUISetState()

While 1
    If GUIGetMsg() = -3 Then Exit
WEnd

Пример с toolwindow:
Код:
#include <WindowsConstants.au3>
$hGui = GuiCreate('Test window', 250, 200, -1, -1, -1, $WS_EX_TOOLWINDOW)
$hLabel = GUICtrlCreateLabel('Высота заголовка слишком мала' & @CRLF & 'да и крестик какой-то хилый', 5, 5, 240, 180)
GUISetState()

While 1
    If GUIGetMsg() = -3 Then Exit
WEnd
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
#Include <APIConstants.au3>
#Include <WinAPIEx.au3>

$hForm = GUICreate('MyGUI', 400, 400, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_DLGMODALFRAME)

_WinAPI_SetClassLongEx($hForm, $GCL_HICONSM, 0)
_WinAPI_SetClassLongEx($hForm, $GCL_HICON, 0)

GUISetState()

Do
Until GUIGetMsg() = -3
 
Автор
Redline

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Yashied
Отлично!
Но если так создавать дочернее окно, то происходит сброс иконки у окна-родителя.
Код:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <APIConstants.au3>
#include <WinAPIEx.au3>

$hGUI = GUICreate('Main window', 400, 300, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_SIZEBOX, $WS_MAXIMIZEBOX))
$hButton = GUICtrlCreateButton('show child', 10, 100, 100, 21)
GUISetState()

While 1
	$hMsg = GUIGetMsg()
	Select
		Case $hMsg = -3
			Exit
		Case $hMsg = $hButton
			GUISetState(@SW_DISABLE, $hGUI)
			$hGuiChild = GuiCreate('Child window', 250, 200, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_DLGMODALFRAME, $hGUI)
			_WinAPI_SetClassLongEx($hGuiChild, $GCL_HICONSM, 0)
			_WinAPI_SetClassLongEx($hGuiChild, $GCL_HICON, 0)
			GUISetState(@SW_SHOW)
			While 1
				$hMsg_Child = GUIGetMsg()
				Switch $hMsg_Child
					Case -3
						ExitLoop
				EndSwitch
			WEnd
			GUISetState(@SW_ENABLE, $hGUI)
			GUIDelete($hGuiChild)
	EndSelect
WEnd

Если задать иконку для родителя через GuiSetIcon, то она не сбрасывается, а стандартная иконка AutoIt или скомпилированная через AutoIt3Wrapper_icon сбрасывается.
Есть решение?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Сбрасывается потому что все окна AutoIt имеют один класс, а иконку ты убираешь как раз из класса... Короче, просто установи принудительно иконку для основного окна с помощью GUISetIcon().
 
Автор
Redline

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
CreatoR
Что-то я сам до этого не дотумкал :D
Всем спасибо, тема решена!
 
Верх