Есть проект в котором основное окно "диалог" в ево системное меню дополняетса еще одно.. ;************************ .IF uMsg == WM_INITDIALOG ;************************ mov hSysDlgMenu, FUNC(GetSystemMenu,hDlgMain,FALSE) invoke AppendMenu,hSysDlgMenu,MF_SEPARATOR,FALSE,NULL invoke AppendMenu,hSysDlgMenu,MF_STRING,IDM_RESET,addr szReset нажав ево оно чистит список.. ;**************************** .ELSEIF uMsg == WM_SYSCOMMAND ;**************************** .if wParam == IDM_RESET invoke SendMessage,hCBO1,CB_RESETCONTENT,NULL,NULL jmp reset ну вот какая проблемма я не хочу постояно заходить в менню а хочу назначить клавишу быстрого запуска, наприммер "F5" как ето зделать в проекте в котором только одно окно я не знаю.. В "Microsoft Visual Studio 6.0" визард создает штото подобное но для создания окна используетса "CreateWindow" а у миння только "DialogBoxParam" и вот я не знаю куда впаять "hAccelTable" который я нашол в исходнике визарда.. HACCEL hAccelTable; hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_MY555); я имел ввиду што у миння не исользуетса подобный код: if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) если кто поннял дайте ответ (канешно ето для MASM32) вот исходник если што http://slil.ru/24861651/96000503/WinHide.zip
invoke RegisterHotKey, hDlg, 0C000h, NULL, VK_F5 - после создания диалога и получения его хэндла. при нажатии F5 в callback на адрес hDlg придёт сообщение WM_HOTKEY, с wParam, установленым в 0C000h.
cresta В msdn написано, что с WM_HOTKEY могут приходить IDHOT_SNAPDESKTOP и IDHOT_SNAPWINDOW. Для этого нужно использовать RegisterHotKey? Окно через CreateWindowEx.
Не уверен, что правильно понял вопрос... Если ты хочешь ловить IDHOT_SNAPDESKTOP и IDHOT_SNAPWINDOW, то регистрировать RegisterHotKey придётся, ибо без RegisterHotKey сообщения WM_HOTKEY (и соответственно IDHOT_SNAPDESKTOP и IDHOT_SNAPWINDOW в качестве wParam при нём) в оконную процедуру не приходят. А как добиться, чтобы wParam был равен указаным константам - не знаю.
Люди а почему не сохранняетса ни одна страница етих форумов в какой я уже не пробывал формат запакован или так ошыпка страницу нельзя сохранить или ето только у миння !!! А г да спасиба за ответы !!!
cresta Спасибо, Вы все правильно поняли. Можно регистрируя с RegisterHotKey, но тогда не понятно зачем эти константы вообще нужны.
dr_dred Я имел ввиду, что непонятно, при каких условиях система посылает WM_HOTKEY с wParam равными IDHOT_SNAPDESKTOP или IDHOT_SNAPWINDOW, если их специально не оговаривать при регистрации. Я во всяком случае потыкал во все клавиши, но так и не увидел этих констант, чтобы они передавались в wParam. Ну а если самому их указывать при регистрации, то конечно, они придут. Но чем они в таком случае отличаются от любых других чисел - непонятно, и какой смысл присваивать им специальное обозначение - тоже неясно.
Работает.. Код (Text): ;************************ .IF uMsg == WM_INITDIALOG ;************************ invoke RegisterHotKey,hDlgMain,0C000h,NULL,VK_F5 ;************************* .ELSEIF uMsg == WM_HOTKEY ;************************* .if wParam == 0C000h invoke MessageBeep,MB_OK .endif п.с правда не сосвсем поннятен второй аргумент id.. BOOL RegisterHotKey(HWND hWnd, int id, UINT fsModifiers, UINT vk); id [in] Определяет идентификатор горячего ключа. Никакой другой горячий ключ на вызове резьбы не должен иметь тот же идентификатор. Приложение должно определить величину в дипазоне 0x0000 через 0xBFFF. Динамическая связь коллективной библиотеки () DLL должна определить величину в дипазоне 0xC000 через 0xFFFF ( дипазон возвратился функцией GlobalAddAtom). Для того, чтобы избегать конфликтов с горячими-ключевыми идентификаторами определенными другим коллективным DLLs, DLL должно использовать функцию GlobalAddAtom, чтобы получить горячий-ключевой идентификатор. И ещё в системном меню етого диалога есть етот пункт с текстом "Reset" и теперь если нажать на "F5" будет выполнина таже процедура (ет поннятно) но у миння вопрос а как показать в етом пункте менню што мол можно уже просто нажать горячую клавишу "F5" и мол ето будет тоже самое, мне што нада тупо написать текст "Reset F5" или есть какойто метод програмно ето зделать.. Я помню когда работаеш с редактором "меню" он ети горячие клавишы ставит в пункте менню красива, так сказать под ленейку..
Ты сделал глобальную горячую клавишу (зарегистрировал ее в системе с помощью RegisterHotKey). Теперь действие по F5 будет работать даже когда окно скрыто. Для твоих целий лучше всетаки разобратся с TranslateAccelerator
mikityak Если у тебя есть редактор меню, то в нем наверняка можно указать любую клавишу для итема меню. Делаешь меню, которое аналогично системному, и указываешь в нем для итема Reset горячую клавишу F5. А при запуске программы удаляешь пункты системного меню, и на их место втыкаешь своё меню с клавишей F5.
GMax Для использования TranslateAccelerator нужно не использовать DialogBoxParam. Это вечная проблема. В таких случаях можно поискать по форуму или обрабатывать WM_KEYDOWN самостоятельно. mikityak Если в редакторе меню все же нет кнопочки для назначения горячей клавиши, делай типа следующего: "Reset\tF5" \t поставит tab.