[asm] Klawisze skrótów

0

Język: Assembler

Witam wszystkich!
Mam problem z klawiszami skrótów {accelerators}. We wszystkich przykładach jakie znalazłem ich obsługa realizowana jest w głównej pętli poprzez wywołanie funkcji "TranslateAccelerator". Jednak w moim programie nie ma takiej pętli, gdyż jego główne okno jest oknem dialogowym. W pliku Win32.hlp w opisie owej funkcji jest napisane, że zamienia ona komunikat WM_KEYDOWN (lub WM_SYSKEYDOWN) na WM_COMMAND (lub WM_SYSCOMMAND), jeśli dany klawisz znajduje się w tablicy skrótów. Pierwsze co mi przyszło na myśl, to dopisanie obsługi tego komunikatu:

.ELSEIF uMsg==WM_KEYDOWN
;tu następuje ustawienie Message
invoke TranslateAccelerator, hWnd, hAccel, addr Message

Niestety okno główne nigdy nie otrzymuje tego komunikatu. Również dopisanie powyższego kodu do procedury obsługi okna podrzędnego {child window} nie dało żadnych rezultatów. Będę wdzięczny za pomoc w rozwiązaniu tego problemu.

0

Accelerators to te, które są w menu umieszczane i są podkreślone, czy to są klawisze skrótów?
Jeżeli to drugie to taki kod znalazłem:
[code].data
hmsg db "HotKey CTRL + ALT + A Works good!",0
hcap db "Hotkey Example",0

.code
.if uMsg == WM_CREATE
invoke RegisterHotKey,hWnd,065h,MOD_CONTROL or MOD_ALT, 041h ; CTRL + ALT + A (041h is 65 - 065h is 101)

.elseif uMsg == WM_HOTKEY
invoke MessageBox,hWin,addr hmsg,addr hcap, MB_OK or MB_ICONINFORMATION

.elseif uMsg == WM_DESTROY
invoke UnregisterHotKey,hWin,065h
invoke PostQuitMessage,NULL
return 0
.endif [/code]

A jeżeli to są te podkreślone w menu, to obawiam się, że przy Dialog nie da rady (przy oknie typu Dialog nie można menu dorzucić)

0

Accelerators to te, które są w menu umieszczane i są podkreślone, czy to są klawisze skrótów?

Mi chodzi o te w menu (np. w menu Plik mam polecenie Otwórz... Ctrl+O i jak nacisnę Ctrl+O to otworzy mi się okno OpenFile).

A jeżeli to są te podkreślone w menu, to obawiam się, że przy Dialog nie da rady (przy oknie typu Dialog nie można menu dorzucić)

Da radę, bo w moim programie okno główne jest dialogowe i mam menu :-)

A co do kodu, to - owszem - jest to jakieś rozwiązanie, ale ma pewną wadę:
otóż jeśli mam mocno rozbudowane menu, to ustawienie skrótów dla każdego polecenia jest niezwykle czasochłonne (dla każdego elementu należy wywołać funckję RegisterHotKey, a na koniec UnregisterHotKey).
Jednak istnieje funkcja LoadAccelerators, która robi to za jednym zamachem. Chciałbym, aby właśnie to ona została użyta.

1 użytkowników online, w tym zalogowanych: 0, gości: 1