Что нового

не срабатывает клик по пункту меню (если вызываю меню кликая по кнопке)

Pahuchiy

Новичок
Сообщения
37
Репутация
0
Если вызываю меню по клику на пустом месте окна - действие происходит. Если по клику на кнопке - нет.
Требуется чтобы срабатывало везде.
Код:
#include <GuiMenu.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

;Global Enum $idOpen = 1000, $idSave, $idInfo
Global $idOpen
_Main()

Func _Main()
    ; Создаёт GUI
    GUICreate("Menu", 400, 300)
    GUISetState()
   $iButton = GUICtrlCreateButton("OK", 50, 70, 70, 28)
    ; Регистрация обработчика сообщений
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")

    ; Цикл выполняется, пока окно не будет закрыто
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

EndFunc   ;==>_Main

; Обработчик сообщений WM_COMMAND
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
   #forceref $hWnd, $iMsg, $ilParam
   Switch $iwParam
	  Case $idOpen
		 _WinAPI_ShowMsg ("Открыть")
   EndSwitch
EndFunc   ;==>WM_COMMAND

; Обработчик сообщений WM_CONTEXTMENU
Func WM_CONTEXTMENU($hWnd, $iMsg, $iwParam, $iParam)
    #forceref $hWnd, $iMsg, $iParam
    $hMenu = _GUICtrlMenu_CreatePopup()
	$menuAction=_GUICtrlMenu_InsertMenuItem($hMenu,0,"Action")
	$menuSubAction = _GUICtrlMenu_CreateMenu ()
	_GUICtrlMenu_InsertMenuItem($menuSubAction,0,"Copy",$idOpen)
	_GUICtrlMenu_SetItemSubMenu($hMenu, 0, $menuSubAction)
    _GUICtrlMenu_TrackPopupMenu ($hMenu, $iwParam)
    _GUICtrlMenu_DestroyMenu ($hMenu)
    Return True
EndFunc   ;==>WM_CONTEXTMENU
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
_GUICtrlMenu_TrackPopupMenu ($hMenu, $hWnd)
 
Автор
P

Pahuchiy

Новичок
Сообщения
37
Репутация
0
InnI сказал(а):
Код:
_GUICtrlMenu_TrackPopupMenu ($hMenu, $hWnd)
Код:
#include <GuiMenu.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

;Global Enum $idOpen = 1000, $idSave, $idInfo
Global $idOpen
_Main()

Func _Main()
    ; Создаёт GUI
    GUICreate("Menu", 400, 300)
    GUISetState()
   global $iButton = GUICtrlCreateButton("OK", 50, 70, 70, 28)
   global $hButton = GUICtrlGetHandle($iButton)
    ; Регистрация обработчика сообщений
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")

    ; Цикл выполняется, пока окно не будет закрыто
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

EndFunc   ;==>_Main

; Обработчик сообщений WM_COMMAND
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
   #forceref $hWnd, $iMsg, $ilParam
   Switch $iwParam
	  Case $idOpen
		 _WinAPI_ShowMsg ("Открыть")
   EndSwitch
EndFunc   ;==>WM_COMMAND

; Обработчик сообщений WM_CONTEXTMENU
Func WM_CONTEXTMENU($hWnd, $iMsg, $iwParam, $iParam)
    #forceref $hWnd, $iMsg, $iParam
    $hMenu = _GUICtrlMenu_CreatePopup()
	$menuAction=_GUICtrlMenu_InsertMenuItem($hMenu,0,"Action")
	$menuSubAction = _GUICtrlMenu_CreateMenu ()
	_GUICtrlMenu_InsertMenuItem($menuSubAction,0,"Copy",$idOpen)
	_GUICtrlMenu_SetItemSubMenu($hMenu, 0, $menuSubAction)
    _GUICtrlMenu_TrackPopupMenu ($hMenu, $hButton)
    _GUICtrlMenu_DestroyMenu ($hMenu)
    Return True
EndFunc   ;==>WM_CONTEXTMENU

не работает
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
предугадаю следующий вопрос и как пример
разделение меню на разные элементы
Код:
#include <GuiMenu.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

Global Enum $idOpen = 1000, $idSave, $idInfo, $obt, $sbt, $ibt

_Main()

Func _Main()
	; Создаёт GUI
	GUICreate("Menu", 400, 300)
	Global $bt = GUICtrlCreateButton(123, 10, 10, 70, 50)
	GUISetState()

	; Регистрация обработчика сообщений
	GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
	GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")

	; Цикл выполняется, пока окно не будет закрыто
	Do
	Until GUIGetMsg() = $GUI_EVENT_CLOSE

EndFunc   ;==>_Main

; Обработчик сообщений WM_COMMAND
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
	#forceref $hWnd, $iMsg, $ilParam
	Switch $iwParam
		Case $idOpen
			;действие
		Case $idSave
			;действие
		Case $idInfo
			;действие
		Case $obt
			;действие
		Case $sbt
			;действие
		Case $ibt
			;действие
	EndSwitch
EndFunc   ;==>WM_COMMAND

; Обработчик сообщений WM_CONTEXTMENU
Func WM_CONTEXTMENU($hWnd, $iMsg, $iwParam, $ilParam)
	#forceref $hWnd, $iMsg, $ilParam
	Switch _WinAPI_GetDlgCtrlID($iwParam)
		Case 0
			_MW($hWnd)
		Case $bt
			_BT($hWnd)
	EndSwitch
	Return True
EndFunc   ;==>WM_CONTEXTMENU

Func _MW($hw)
	Local $hMenu
	$hMenu = _GUICtrlMenu_CreatePopup()
	_GUICtrlMenu_InsertMenuItem($hMenu, 0, "Открыть", $idOpen)
	_GUICtrlMenu_InsertMenuItem($hMenu, 1, "Сохранить", $idSave)
	_GUICtrlMenu_InsertMenuItem($hMenu, 3, "", 0)
	_GUICtrlMenu_InsertMenuItem($hMenu, 3, "Информация", $idInfo)
	_GUICtrlMenu_TrackPopupMenu($hMenu, $hw)
	_GUICtrlMenu_DestroyMenu($hMenu)
EndFunc   ;==>_MW

Func _BT($hw)
	Local $hMenu
	$hMenu = _GUICtrlMenu_CreatePopup()
	_GUICtrlMenu_InsertMenuItem($hMenu, 0, "Кнопка Открыть", $obt)
	_GUICtrlMenu_InsertMenuItem($hMenu, 1, "Кнопка Сохранить", $sbt)
	_GUICtrlMenu_InsertMenuItem($hMenu, 3, "", 0)
	_GUICtrlMenu_InsertMenuItem($hMenu, 3, "Кнопка Инфо", $ibt)
	_GUICtrlMenu_TrackPopupMenu($hMenu, $hw)
	_GUICtrlMenu_DestroyMenu($hMenu)
EndFunc   ;==>_BT
 
Верх