Что нового

Получение WM_NOTIFY

Cytrus

Новичок
Сообщения
110
Репутация
3
Не получается получение сообщений WM_NOTIFY.

Код:
#include <WindowsConstants.au3>
Global $hw = GUICreate('', 400, 400)
Global $ic = GUICtrlCreateEdit('', 10, 10, 100, 50, BitOr(0x003010c0, 0x00000080))
Global $ia = GUICtrlCreateInput('', 10, 70, 100, 50)
Global $hi = GUICtrlGetHandle($ic)
Global $ha = GUICtrlGetHandle($ia)
GUISetState()
GUIRegisterMsg(0x004E, "WM_NOTIFY")
Do
Until GUIGetMsg() = -3
GUIDelete()



Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR = DllStructCreate("struct;hwnd hWndFrom;uint_ptr IDFrom;INT Code;endstruct" & ";int Ind", $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
; MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '1')
Switch $hWndFrom
; MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '2')
Case $hi
MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '3')
Switch $iCode
MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '4')
Case $NM_DBLCLK
MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '5')
Case $NM_CLICK
MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '6')
Case $NM_RETURN
MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '7')
EndSwitch
EndSwitch
; Return 'GUI_RUNDEFMSG'
Return
EndFunc
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Cytrus, если вопрос решен, то полезно было бы оставить и вопрос и решение.
 
Автор
Cytrus

Cytrus

Новичок
Сообщения
110
Репутация
3
Я поспешил. Вопрос не решён.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Cytrus, Edit/Input не отправляют WM_NOTIFY. Используйте WM_COMMAND или сабклассинг
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
Global $hw = GUICreate('', 400, 400)
Global $ic = GUICtrlCreateEdit('', 10, 10, 100, 50, BitOr(0x003010c0, 0x00000080))
Global $ia = GUICtrlCreateInput('', 10, 70, 100, 50)
;~ Global $hi = GUICtrlGetHandle($ic)
;~ Global $ha = GUICtrlGetHandle($ia)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
Do
Until GUIGetMsg() = -3
GUIDelete()



Func WM_COMMAND($hWnd, $imsg, $iwParam, $ilParam)
    Local $nNotifyCode, $nID
    $nNotifyCode = BitShift($iwParam, 16)
    $nID = BitAND($iwParam, 0xFFFF)
    Switch $hWnd
        Case $hw
            Switch $nNotifyCode
                Case $EN_CHANGE
                    Switch $nID
                        Case $ic
                            ConsoleWrite(GUICtrlRead($ic) & @CRLF)
						Case $ia
							ConsoleWrite(GUICtrlRead($ia) & @CRLF)
                    EndSwitch
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
 
Автор
Cytrus

Cytrus

Новичок
Сообщения
110
Репутация
3
joiner, а для чего пишется так?

Код:
Return $GUI_RUNDEFMSG


Почему не просто так?

Код:
Return
 
Верх