Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Работа с контекстным меню (http://forum.oszone.net/showthread.php?t=329702)

Атос 11-09-2017 12:21 2764048

Работа с контекстным меню
 
Привет.
Как мне привязывать контекстное меню к определённым элементам, а не ко всему окну?

Т.е, меню 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 2764084

Вопрос снят.

Creat0R 11-09-2017 22:32 2764162

Цитата:

Цитата Атос
Вопрос снят. »

Если снят, то будь добр выложить решение. Может другим пригодится.

Атос 12-09-2017 09:29 2764216

Совместными усилиями в этом участвовали товарищи из следующего массива:
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



Время: 21:31.

Время: 21:31.
© OSzone.net 2001-