PDA

Показать полную графическую версию : [решено] Работа с контекстным меню


Атос
11-09-2017, 12:21
Привет.
Как мне привязывать контекстное меню к определённым элементам, а не ко всему окну?

Т.е, меню GUICtrlCreateListView и меню статических элементов должны различаться.


#include <GuiMenu.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Global $idOpen = 1000, $idSave, $idInfo
_MList()
Func _MList()
Global $hList = GUICreate('111')
$iButton = GUICtrlCreateListView("QQQQQQQQQQQQ", 0, 0, 200, 327)
global $mlist = GUICtrlGetHandle($iButton)
GUISetState()
GUIRegisterMsg(0x0111, "WM_COMMAND")
GUIRegisterMsg(0x007B, "WM_CONTEXTMENU_111")
GUIRegisterMsg(0x007B, "WM_CONTEXTMENU_222")
Do
Until GUIGetMsg() = -3
GUIDelete()
EndFunc

Func WM_CONTEXTMENU_111($hList, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $lParam
Local $hMenu
$hMenu = _GUICtrlMenu_CreatePopup ()
_GUICtrlMenu_InsertMenuItem ($hMenu, 0, "1111111", $idOpen)
_GUICtrlMenu_InsertMenuItem ($hMenu, 1, "2222222", $idSave)
_GUICtrlMenu_InsertMenuItem ($hMenu, 3, "", 0)
_GUICtrlMenu_InsertMenuItem ($hMenu, 3, "3333333", $idInfo)
_GUICtrlMenu_TrackPopupMenu ($hMenu, $mlist)
; MsgBox(0, 'Menu' & '', @CRLF & $wParam & @CRLF & $lParam)
_GUICtrlMenu_DestroyMenu ($hMenu)
Return True
EndFunc

Func WM_CONTEXTMENU_222($mlist, $iMsg)
#forceref $hWnd, $iMsg, $lParam
Local $hMenu
$hMenu = _GUICtrlMenu_CreatePopup(32)
_GUICtrlMenu_InsertMenuItem ($hMenu, 3, "AAAAAAA", $idInfo)
_GUICtrlMenu_TrackPopupMenu ($hMenu, $mlist)
; MsgBox(0, 'Menu' & '', @CRLF & $wParam & @CRLF & $lParam)
_GUICtrlMenu_DestroyMenu ($hMenu)
Return True
EndFunc

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
; MsgBox(0, 'Command' & '',@CRLF & $wParam & @CRLF & $lParam)
#forceref $hWnd, $iMsg, $lParam
Switch $wParam
Case $idOpen
MsgBox(0, '' & '', 'Открыть')
Case $idSave
MsgBox(0, '' & '', 'Сохранить')
Case $idInfo
MsgBox(0, '' & '', 'Информация')
EndSwitch
EndFunc

Атос
11-09-2017, 15:33
Вопрос снят.

Creat0R
11-09-2017, 22:32
Вопрос снят. »
Если снят, то будь добр выложить решение. Может другим пригодится.

Атос
12-09-2017, 09:29
Совместными усилиями в этом участвовали товарищи из следующего массива:
Global Array[3] = [Alofa, joiner, ra4o]


#include <GuiMenu.au3>
Global Enum $id_111 = 1000, $id_222, $id_333, $id_444
Global $hGUI = GUICreate('111')
Global $hListViewMenu = GUICtrlCreateListView("QQQQQQ", 0, 0, 200, 327)
Global $LBL = GUICtrlCreateLabel('', 205, 10, 200, 20)
Global $hListViewMenu1 = GUICtrlGetHandle($hListViewMenu)
GUISetState()
GUIRegisterMsg(0x0111, "WM_COMMAND")
GUIRegisterMsg(0x007B, "WM_CONTEXTMENU")
Do
Until GUIGetMsg() = -3

Func WM_CONTEXTMENU($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $lParam
Switch $wParam
Case $hGUI
_WinMenu($hWnd)
Case $hListViewMenu1
_ItemMenu($hWnd)
EndSwitch
Return True
EndFunc ;==>WM_CONTEXTMENU

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $lParam
Switch _WinAPI_LoWord($wParam)
Case $id_111
GUICtrlSetData($LBL, 'Выбран первый пункт')
Case $id_222
GUICtrlSetData($LBL, 'Выбран второй пункт')
Case $id_333
GUICtrlSetData($LBL, 'Выбран третий пункт')
Case $id_444
GUICtrlSetData($LBL, 'Выбрано меню окна')
EndSwitch
EndFunc ;==>WM_COMMAND

Func _ItemMenu($hw)
Local $hMenu
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu, 0, "Первый пункт", $id_111)
_GUICtrlMenu_InsertMenuItem($hMenu, 1, "Второй пункт", $id_222)
_GUICtrlMenu_InsertMenuItem($hMenu, 2, "Третий пункт", $id_333)
_GUICtrlMenu_TrackPopupMenu($hMenu, $hw)
_GUICtrlMenu_DestroyMenu($hMenu)
EndFunc ;==>_ItemMenu

Func _WinMenu($hw)
Local $hMenu
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu, 0, "Меню окна", $id_444)
_GUICtrlMenu_TrackPopupMenu($hMenu, $hw)
_GUICtrlMenu_DestroyMenu($hMenu)
EndFunc ;==>_WinMenu




© OSzone.net 2001-2012