#include <GUIConstantsEx.au3>
#include <GuiTab.au3>
#include <TabConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <GuiMenu.au3>
Opt("GUIOnEventMode", 1)
Global Enum $menuId_Close = 2000, $menuId_Save, $menuId_Save_As, $menuId_Print
Local $hMenu
$guiWelcome = GUICreate("中徽教育", 600, 300)
GUISetOnEvent($GUI_EVENT_CLOSE, "Func_GUI_EVENT_CLOSE")
; 1.创建标签卡
;$tabWelcome = _GUICtrlTab_Create( $guiWelcome, 1, 27, 598, 230)
$tabWelcome = GUICtrlCreateTab(1, 27, 598, 230) ; 使用此种原生创建,主要就是为了响应右键菜单,做出菜单交互
$item0InTabWelcome = _GUICtrlTab_InsertItem ( $tabWelcome, 0, "标签页0")
$item1InTabWelcome = _GUICtrlTab_InsertItem ( $tabWelcome, 1, "标签页1")
GUISetState(@SW_SHOW, $guiWelcome)
; 2.监听右键
GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") ; 响应 _GUICtrlTab_Create 标签卡失败
;-------------------------------- 分割线 -----------------------------
While 1
Sleep(200)
WEnd
Func Func_GUI_EVENT_CLOSE ()
Exit
EndFunc
Func _WM_NOTIFY($hWndGUI, $MsgID, $wParam, $lParam)
Local $tNMHDR, $hwndFrom, $code, $i_idOld, $i_idNew
Local $tNMTBHOTITEM
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hwndFrom = DllStructGetData($tNMHDR, "hWndFrom")
$code = DllStructGetData($tNMHDR, "Code")
; 使用 GUICtrlCreateTab 原生创建的标签卡必须这样才能从 $hwndFrom 中得到
If Not (hwnd($tabWelcome)) Then
$tabWelcome= ControlGetHandle($guiWelcome, "", $tabWelcome)
EndIf
Switch $hwndFrom
; 标签卡
Case $tabWelcome
Switch $code
; 3.点击右键时创建菜单
Case $NM_RCLICK
ConsoleWrite("dddddddddd" & @CRLF)
; _GUICtrlTab_Create创建标签卡:
; 使用 GUICtrlCreateContextMenu 时执行
; 使用 _GUICtrlMenu_CreatePopup 时不执行
; GUICtrlCreateTab原生建标签卡:
; GUICtrlCreateContextMenu中使用 _WinAPI_GetDlgCtrlID 不执行;不使用 _WinAPI_GetDlgCtrlID 执行。
; 使用_GUICtrlMenu_CreatePopup时不执行
MouseClick("left")
; _GUICtrlTab_Create创建标签卡:使用或不使用 _WinAPI_GetDlgCtrlID 都不出现
; GUICtrlCreateTab原生建标签卡:使用 _WinAPI_GetDlgCtrlID 出现;不使用 _WinAPI_GetDlgCtrlID 不出现
$menu = GUICtrlCreateContextMenu(_WinAPI_GetDlgCtrlID($tabWelcome))
$menuItem1 = GUICtrlCreateMenuItem("菜单项1", $menu)
GUICtrlSetOnEvent($menuItem1, "Func_MenuItem1") ; 可以响应事件
GUICtrlCreateMenuItem("菜单项2", $menu)
GUICtrlCreateMenuItem("菜单项3", $menu)
#cs
; _GUICtrlTab_Create创建标签卡:出现
; GUICtrlCreateTab原生建标签卡:出现
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu, 0, "关闭", $menuId_Close) ; 不知道这种需求下如何点击
_GUICtrlMenu_InsertMenuItem($hMenu, 1, "", 0)
_GUICtrlMenu_InsertMenuItem($hMenu, 2, "保存", $menuId_Save)
_GUICtrlMenu_InsertMenuItem($hMenu, 3, "另存为...", $menuId_Save_As)
_GUICtrlMenu_InsertMenuItem($hMenu, 4, "", 0)
_GUICtrlMenu_InsertMenuItem($hMenu, 5, "打印", $menuId_Print)
_GUICtrlMenu_TrackPopupMenu($hMenu, $tabWelcome, -1, -1, 1, 1, 2, 0 )
_GUICtrlMenu_DestroyMenu($hMenu)
#ce
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
; 尝试响应 _GUICtrlMenu_CreatePopup 创建的菜单
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
If $hWnd = $tabWelcome Then ; 这样也不行 _WinAPI_GetDlgCtrlID($tabWelcome)
Switch $wParam
Case $menuId_Close
_WinAPI_ShowMsg("你点击了 [关闭] 菜单")
Case $menuId_Save
_WinAPI_ShowMsg("你点击了 [保存] 菜单")
Case $menuId_Save_As
_WinAPI_ShowMsg("你点击了 [另存为] 菜单")
EndSwitch
EndIf
EndFunc ;==>WM_COMMAND
Func Func_MenuItem1()
ConsoleWrite("右键菜单点击" & @CRLF)
EndFunc