GUIRegisterMsg Problem!

  • Ich möchte ein Fenster (400x400) mit der Maus auch im Clientbereich bewegen lassen. Es gibt mehrere Möglichkeiten:
    1.

    [autoit]

    GUIRegisterMsg($WM_NCHITTEST, "_Touch")
    Func _Touch($nWnd, $iMsg, $iwParam, $ilParam)
    if ($nWnd = $hGUI) and ($iMsg = $WM_NCHITTEST) then Return $HTCAPTION
    EndFunc

    [/autoit]

    2.

    [autoit]

    GUICreate("Menu", 400, 300,-1,-1,-1,$GUI_WS_EX_PARENTDRAG)
    GUICtrlCreateLabel("",0,0,1000,1000,-1, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUISetState()

    [/autoit]

    Diese Methoden funktionieren alleinstehend gut, jedoch möchte ich auch ein Popupmenü einfügen und nun funktionieren die GUIRegisterMsg des PopupMenüs nicht mehr und werden auch nicht aufgerufen!

    Beispiel
    [autoit]


    #include
    #include
    #include
    #include

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global Enum $idOpen = 1000, $idSave, $idInfo

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Menu", 400, 300,-1,-1,-1,$GUI_WS_EX_PARENTDRAG)
    GUICtrlCreateLabel("",0,0,1000,1000,-1, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ; Register message handlers
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") ;funktioniert
    GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU"); funktioniert nicht

    [/autoit] [autoit][/autoit] [autoit]

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Handle WM_COMMAND messages
    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Switch $iwParam
    Case $idOpen
    _WinAPI_ShowMsg ("Open")
    Case $idSave
    _WinAPI_ShowMsg ("Save")
    Case $idInfo
    _WinAPI_ShowMsg ("Info")
    EndSwitch
    EndFunc ;==>WM_COMMAND

    [/autoit] [autoit][/autoit] [autoit]

    ; Handle WM_CONTEXTMENU messages
    Func WM_CONTEXTMENU($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hMenu

    [/autoit] [autoit][/autoit] [autoit]

    $hMenu = _GUICtrlMenu_CreatePopup ()
    _GUICtrlMenu_InsertMenuItem ($hMenu, 0, "Open", $idOpen)
    _GUICtrlMenu_InsertMenuItem ($hMenu, 1, "Save", $idSave)
    _GUICtrlMenu_InsertMenuItem ($hMenu, 3, "", 0)
    _GUICtrlMenu_InsertMenuItem ($hMenu, 3, "Info", $idInfo)
    _GUICtrlMenu_TrackPopupMenu ($hMenu, $iwParam)
    _GUICtrlMenu_DestroyMenu ($hMenu)
    Return True
    EndFunc ;==>WM_CONTEXTMENU

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Ich hoffe jemand weiß ein Antwort auf dieses Fenomen! :)

    Einmal editiert, zuletzt von Faweyr (9. September 2010 um 12:08)

  • Wofür GuiRegisterMsg?

    Spoiler anzeigen
    [autoit]

    #include <GuiMenu.au3>
    #include <GuiConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global Enum $idOpen = 1000, $idSave, $idInfo

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Menu", 400, 300)
    $hLabel = GUICtrlCreateLabel("",0,0,400,300,0, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $hMenu = GUICtrlCreateContextMenu($hLabel)
    $hMenuOpen = GUICtrlCreateMenuItem("Open", $hMenu)
    $hMenuSave = GUICtrlCreateMenuItem("Save", $hMenu)
    $hMenuInfo = GUICtrlCreateMenuItem("Info", $hMenu)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ; Loop until user exits
    Global $msg

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $hMenuOpen
    _WinAPI_ShowMsg ("Open")
    Case $hMenuSave
    _WinAPI_ShowMsg ("Save")
    Case $hMenuInfo
    _WinAPI_ShowMsg ("Info")
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Das ist nur ein Beispiel Script, in echt handelt es sich um ein GUI, das mit _WinAPI_UpdateLayeredWindow arbeitet und das Popup-Menü nur erscheint wenn man mit Rechtsklick auch das GUI klickt, ebenso sollte dieses auch verschoben werden! :evil: