Не получается назначить выпадающему подменю стиль $MNS_NOTIFYBYPOS, чтобы при выборе пунктов отрабатывалось $WM_MENUCOMMAND, а не $WM_COMMAND.
В скрипте также используются сообщения $WM_COMMAND -для других пунктов меню.
Но нужно, чтобы от пунктов именно этого выпадающего меню сообщения шли в $WM_MENUCOMMAND.
Проверка назначения стиля _GUICtrlMenu_GetMenuStyle($hRecentFiles) выдает 0.
Пробовал и так: _GUICtrlMenu_SetMenuStyle($hRecentFiles,$MNS_NOTIFYBYPOS).
Функция возвращает 1, то есть вроде как стиль назначает, но в $WM_MENUCOMMAND все равно ничего не передается при клике на пункты.
Вот сама функция для WM_MENUCOMMAND (в GUIRegisterMsg она, конечно, же зарегистрирована.)
На данный момент в WM_MENUCOMMAND вообще ничего не передается.
Код:
$hRecentFiles = _GUICtrlMenu_CreatePopup(BitOr(32,8));_GUICtrlMenu_CreateMenu(BitOr(32,8))
_GUICtrlMenu_InsertMenuItem($hFileMenu, 7, "Недавние файлы", $idRecentFilesMenu,$hRecentFiles)
В скрипте также используются сообщения $WM_COMMAND -для других пунктов меню.
Но нужно, чтобы от пунктов именно этого выпадающего меню сообщения шли в $WM_MENUCOMMAND.
Проверка назначения стиля _GUICtrlMenu_GetMenuStyle($hRecentFiles) выдает 0.
Пробовал и так: _GUICtrlMenu_SetMenuStyle($hRecentFiles,$MNS_NOTIFYBYPOS).
Функция возвращает 1, то есть вроде как стиль назначает, но в $WM_MENUCOMMAND все равно ничего не передается при клике на пункты.
Вот сама функция для WM_MENUCOMMAND (в GUIRegisterMsg она, конечно, же зарегистрирована.)
Код:
Func WM_MENUCOMMAND($hWnd, $iMsg, $wParam, $lParam)
;#forceref $hWnd, $iMsg, $iwParam
Local $hMenu = $lParam ; Дескриптор выбранного пункта меню
Local $iIdPointMenu = _WinAPI_LoWord($wParam) ;ID (ИДЕНТИФИКАТОР) пункта
Local $iIndexPointMenu = _WinAPI_HiWord($wParam) ; индекс выбранного пункта.
ConsoleWrite('WM_MENUCOMMAND:' $hMenu & '|'& $iIdPointMenu '|' & $iIndexPointMenu & @CR)
Switch $hMenu
Case $hRecentFiles
Switch $iIdPointMenu
Case 20000,20001,20002,20003,20004,20005,20006,20007,20008,20009
Local $sMenuItem_Text = $aRecentFiles[$iIndexPointMenu]
Local $aPath = SplitPath($sMenuItem_Text, -1, True)
;ConsoleWrite("Абсолютный путь: " & SplitPath($sMenuItem_Text,2)&@CR)
If IsArray($aPath) Then
LoadOneLib($aPath[1], $aPath[4])
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
На данный момент в WM_MENUCOMMAND вообще ничего не передается.