Jump to content

Recommended Posts

Posted

When I try to send a message to my main GUI window, it never arrives.

Here is my code:

#Include <SendMessage.au3>
#Include <GuiConstantsEx.au3>
Opt("GUICloseOnESC", 1) ; ESC closes GUI
Opt("GUIOnEventMode", 1) ; Change to OnEvent mode
Opt('MustDeclareVars', 1)
Opt("GUIEventOptions", 1) ;0=default, 1=just notification, 2=GuiCtrlRead tab index
 
Global Const $myMESSAGE = 0x00099999
global $hWnd
 
_Main()
 
Func _Main()
    local $iBtn
 
$hWnd = GUICreate("Test", 150, 50)
$iBtn = GUICtrlCreateButton("Click Here", 10, 10, 100, 30)
 
GUISetOnEvent($GUI_EVENT_CLOSE, "Event_GUIClose")
GUICtrlSetOnEvent($iBtn, "handle_button_press")
 
GUISetOnEvent($myMESSAGE, "handle_myMESSAGE") ; Setup a handler for my message
 
GUISetState()
 
While 1
Sleep(500)
WEnd
EndFunc   ;==>_Main
 
Func handle_button_press()
ConsoleWrite("handle_button_press() entered" & @CRLF)
 
_SendMessage($hWnd, $myMESSAGE) ; Send a $myMESSAGE message to the main gui
 
EndFunc   ;==>handle_button_press
 
Func handle_myMESSAGE()
ConsoleWrite("handle_myMESSAGE() entered" & @CRLF)
EndFunc   ;==>handle_myMESSAGE
 
Func Event_GUIClose()
ConsoleWrite("Event_GUIClose() entered" & @CRLF)
Exit(1)
EndFunc   ;==>Event_GUIClose

I've tried a standard message ($GUI_EVENT_CLOSE), but that didn't work either.

Posted

Try this line

GUIRegisterMsg($WM_COMMAND, "handle_myMESSAGE") ; Setup a handler for my message

In place of this line GUISetOnEvent($myMESSAGE, "handle_myMESSAGE") ; Setup a handler for my message and see if it works as you're expecting. You'll also need to add #include <WindowsConstants.au3> at the top of your script.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Posted (edited)

Because you must use GUIRegisterMsg() instead of GUICtrlSetOnEvent().

#Include <GUIConstantsEx.au3>
#Include <WinAPI.au3>
 
Opt('GUIOnEventMode', 1)
 
Global Const $WM_MYMESSAGE = _WinAPI_RegisterWindowMessage('MyMessage')
 
Global $hWnd
 
_Main()
 
Func _Main()
    Local $iBtn
    $hWnd = GUICreate('Test', 150, 50)
    GUISetOnEvent($GUI_EVENT_CLOSE, 'Event_GUIClose')
    $iBtn = GUICtrlCreateButton('Click Here', 10, 10, 100, 30)
    GUICtrlSetOnEvent(-1, 'handle_button_press')
    GUIRegisterMsg($WM_MYMESSAGE, 'WM_MYMESSAGE')
    GUISetState()
    While 1
        Sleep(500)
    WEnd
EndFunc   ;==>_Main
 
Func handle_button_press()
    _SendMessage($hWnd, $WM_MYMESSAGE, 10, 99)
EndFunc   ;==>handle_button_press
 
Func Event_GUIClose()
    Exit
EndFunc   ;==>Event_GUIClose
 
Func WM_MYMESSAGE($hWnd, $iMsg, $wParam, $lParam)
    ConsoleWrite('WM_MYMESSAGE  $wParam = ' & Number($wParam) & '  $lParam = ' & Number($lParam) & @CR)
EndFunc   ;==>WM_MYMESSAGE
Edited by Yashied
Posted

Thank you, that worked very well.

Also, thanks for including an example, it helped me understand the process.

It might have saved me a lot of time if the help for _SendMessage() had a comment like "The $iMsg parameter value is for known windows message numbers. For a private message, you must register the private message using '_WinAPI_RegisterWindowMessage()'."

Or in the example, show a private message being sent as well as a known windows message.

Anyway, thanks again.

Andy

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...