Что нового

[Элементы GUI] Наизапутанный способ создания окна

GUIMish

Знающий
Сообщения
122
Репутация
12
Я вот тут сидел, и ко мне пришла такая идея, сделать наизапутанный способ создания окна.
Ну вот я и сделал, кто придумает запутанней, пожалуйста выставляйте!

Я определил эту тему в "Общение", потому что:
Во-первых: У меня так и не получилось на кнопку "Закрыть" сделать функцию закрыть (Я поставил на функцию ESC)
Во-вторых: Я не знаю как мне поставить кнопку на это окно!
и В-третьих: Я не знаю, понадобится это кому-то или нет!

Код:
;~ Autor:  GUIMish
;~ Name:   Наизапутанный способ создания окна

HotKeySet("{ESC}", "Ex")

#include <Misc.au3>
#include <string.au3>

$hWind = _GUICreateWindow("Это окно!", 320, 240, -1, -1)

WinSetState($hWind, '', @SW_SHOW)

For $Num = 10 To 1 Step -1
	Sleep(100)
	$Num = 10
Next

Func _GUICreateWindow($KRPFNG, $ROMDDL = -1, $RLRIJR = -1, $EENCFD = -1, $EEHCFD = -1, $RKCNTH = -1, $RFJNBH = -1)
	$RLFKCD = 0
	$YRKCNF = BitOr(0x00020000, 0x00C00000, 0x0080000)
	$RLFKCD = DllCall("USER32.DLL", "long", "GetWindowLong", "hwnd", 0, "int", -6)
	$RLFKCD = $RLFKCD[0]
	$RLFCKD = DllCall("USER32.DLL", "hwnd", "CreateWindowEx", "long", 0, "str", _HexToString('4175746F497420763320475549'), "str", $KRPFNG, "long", _
	$YRKCNF - 0, "int", (@DesktopWidth - (400 + (800 / 2) - 400)) / 2, "int", (@DesktopHeight - (300 + (800 / 2) - 400)) / 2, _
	"int", 320, "int", 240, "hwnd", 0, "hwnd", 0, "long", $RLFKCD, "ptr", 0)
	Return $RLFCKD[0]
EndFunc

Func Ex()
	Exit
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Изменённый пример к справочной функции _WinAPI_CreateWindowEx:

Код:
#include <GUIButton.au3>
#include <WinAPISys.au3>
#include <WinAPIRes.au3>
#include <WindowsConstants.au3>

Global Const $sClass = 'MyWindowClass'
Global Const $sName = 'Test ' & StringReplace(@ScriptName, '.au3', '()')

Global $Exit = False

; Get module handle for the current process
Local $hInstance = _WinAPI_GetModuleHandle(0)

; Create a class cursor
Local $hCursor = _WinAPI_LoadCursor(0, 32512) ; IDC_ARROW

; Create a class icons (large and small)
Local $tIcon = DllStructCreate('ptr;ptr')
_WinAPI_ExtractIconEx(@SystemDir & '\shell32.dll', 130, DllStructGetPtr($tIcon, 1), DllStructGetPtr($tIcon, 2), 1)
Local $hIcon = DllStructGetData($tIcon, 1)
Local $hIconSm = DllStructGetData($tIcon, 2)

; Create DLL callback function (window procedure)
Local $hProc = DllCallbackRegister('_WndProc', 'lresult', 'hwnd;uint;wparam;lparam')

; Create and fill $tagWNDCLASSEX structure
Local $tWCEX = DllStructCreate($tagWNDCLASSEX & ';wchar szClassName[' & (StringLen($sClass) + 1) & ']')
DllStructSetData($tWCEX, 'Size', DllStructGetPtr($tWCEX, 'szClassName') - DllStructGetPtr($tWCEX))
DllStructSetData($tWCEX, 'Style', 0)
DllStructSetData($tWCEX, 'hWndProc', DllCallbackGetPtr($hProc))
DllStructSetData($tWCEX, 'ClsExtra', 0)
DllStructSetData($tWCEX, 'WndExtra', 0)
DllStructSetData($tWCEX, 'hInstance', $hInstance)
DllStructSetData($tWCEX, 'hIcon', $hIcon)
DllStructSetData($tWCEX, 'hCursor', $hCursor)
DllStructSetData($tWCEX, 'hBackground', _WinAPI_CreateSolidBrush(_WinAPI_GetSysColor($COLOR_3DFACE)))
DllStructSetData($tWCEX, 'MenuName', 0)
DllStructSetData($tWCEX, 'ClassName', DllStructGetPtr($tWCEX, 'szClassName'))
DllStructSetData($tWCEX, 'hIconSm', $hIconSm)
DllStructSetData($tWCEX, 'szClassName', $sClass)

; Register a window class
_WinAPI_RegisterClassEx($tWCEX)

; Create a window
$hWnd = _WinAPI_CreateWindowEx(0, $sClass, $sName, BitOR($WS_CAPTION, $WS_POPUPWINDOW, $WS_VISIBLE), (@DesktopWidth - 400) / 2, (@DesktopHeight - 400) / 2, 400, 400, 0)
$hButton = _GUICtrlButton_Create($hWnd, 'My Button', 20, 20, 70, 20)

While 1
	Sleep(10)
	
	If $Exit Then
		ExitLoop
	EndIf
WEnd

; Unregister window class and release unnecessary resources
_WinAPI_UnregisterClass($sClass, $hInstance)
_WinAPI_DestroyCursor($hCursor)
_WinAPI_DestroyIcon($hIcon)
_WinAPI_DestroyIcon($hIconSm)

DllCallbackFree($hProc)

Func _WndProc($hWnd, $iMsg, $wParam, $lParam)
	Static Local $iFlag = 0
	
	Switch $iMsg
		Case $WM_CLOSE
			$Exit = 1
		Case $WM_COMMAND
			Switch $lParam
				Case $hButton
					If $iFlag Then
						ConsoleWrite('Button [' & WinGetTitle($hButton) & '] pressed' & @LF)
					EndIf
					
					$iFlag = 1
			EndSwitch
	EndSwitch
	
    Return _WinAPI_DefWindowProcW($hWnd, $iMsg, $wParam, $lParam)
EndFunc
 
Верх