Войти

Показать полную графическую версию : [решено] Коды сообщений Windows - WM_ для Кнопок и чекбоксов ?


FlatX007
14-09-2009, 07:49
Если есть с десяток кнопок или чекбоксов , неудобно для каждой кнопки, чекбокса... прописывать одинаковое действие, например при нажатии кнопки - проигрывание короткого звука, для чекбокса сохранение его статуса в INI файл.
Можно ли это сделать через WM_ ... чтобы при нажатии любой кнопки в с GUI окне выполнялось одинаковое действие...

Пасиба ...

Знаю есть для слайдера ... вроде :blush2:
GUIRegisterMsg($WM_HSCROLL , "WM_HSCROLL" )

Func WM_HSCROLL($hWnd, $iMsg, $iwParam, $ilParam)
EndFunc

Creat0R
14-09-2009, 13:21
Для общих событии есть WM_COMMAND:

#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
;

$hGUI = GUICreate("WM_COMMAND")

$Button = GUICtrlCreateButton("Button", 20, 80)
$CheckBox = GUICtrlCreateCheckbox("Checkbox", 20, 120)

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUISetState()

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd

Func WM_COMMAND($hWndGUI, $MsgID, $WParam, $LParam)
Local $iIDFrom = BitAND($wParam, 0xFFFF) ; Low Word
Local $iCode = BitShift($wParam, 16) ; Hi Word

ConsoleWrite($iIDFrom & ":" & GUICtrlRead($iIDFrom, 1) & @CRLF)

Return $GUI_RUNDEFMSG
EndFunc

Но я лично не стал бы это использовать, лучше так:

#include <GuiConstantsEx.au3>

$hGUI = GUICreate("Events")

$Button = GUICtrlCreateButton("Button", 20, 80)
$CheckBox = GUICtrlCreateCheckbox("Checkbox", 20, 120)

GUISetState()

While 1
$nMsg = GUIGetMsg()

Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case Else
If $nMsg <= 0 Then ContinueLoop

ConsoleWrite($nMsg & ":" & GUICtrlRead($nMsg, 1) & @CRLF)
EndSwitch
WEnd

FlatX007
14-09-2009, 16:26
Return $GUI_RUNDEFMSG »
А зачем возвращается это значение ?
Global Const $GUI_RUNDEFMSG = 'GUI_RUNDEFMSG'

Creat0R
14-09-2009, 22:29
А зачем возвращается это значение ? »
WM_* это Callback-функция, от возврата зависит поведение вызванного события. $GUI_RUNDEFMSG это значение по умолчанию, т.е позволить событию выполниться как и было задуманно.

Подробнее это всё описано в справке к функции GUIRegisterMsg().

FlatX007
15-09-2009, 06:37
Подробнее это всё описано в справке к функции GUIRegisterMsg(). »

Это я в курсе ,что там написано ... но только я мало что понял :)




© OSzone.net 2001-2012