Witam ponownie.
Zrobilem tak - mam menu, obok tego mam napisane skroty klawiszowe. Dodalem tabele acceleratorow do zasobow, dodalem do tych klawiszy event handlery. W nich po prostu wywoluje metody ktore sa wywolywane po kliknieciu w pozycje w menu - nie wiem czy jest to poprawny sposob - moze jest cos lepszego?
W kazdym razie nie dzialaja mi skroty klawiszowe. Co musze zrobic zeby dzialaly?
musisz obsłużyć komunikat WM_KEYDOWN i skoczyć sobie do funkcji która przerobi to na komunikat do menu. Taka funkcja potrzebuje hwnd, message, wparam i lparam.
Wypełniasz strukturę MSG (no chyba że masz do dostęp do oryginalnej z procedury obsługi okna)
a później robisz
TranslateAccelerator(hwnd, hAccel, &msg)
jeśli masz w oknie ListView - to musisz extra wyłapać notyfikację LVN_KEYDOWN i też skoczyć do owej funkcji, tyle że message zmieniasz zawsze na WM_KEYDOWN, a WPARAM podmieniasz na *<LVKEYDOWN>lParam.vkey
eeh, ile ja się namęczyłem z tym akceleratorem przez ListView, tylko kliknąłem na niego(nią?), a acc już nie żył. Ten patent totalnie odbiera fokus z okna. Dlatego piszę o tym LV :)
a co do LPARAM to nie jestem pewny, ale chyba można go totalnie zignorować, albo podmienić na zero. Zaraz po wciśnięciu klawisza - w WM_KEYDOWN lparam raczej zawsze jest zerem
eeee ziom, a NA PEWNO to jest MFC?? Znaczy po New wybrałeś projekt MFC AppWizard??
Jeśli to jest projekt MFC to ClassWizard (ctrl+w) wybierasz Object IDs, zaznaczasz COMMAND, dajesz Add Function i Edit Code i piszesz obsługę.
A w tablicy masz translację ID <-> akcelerator.
sapero: MFC power, nie WinAPI ;-p
Wybralem na pewno MFC app, dalej dialog based.
ziom napisał(a)
Wybralem na pewno MFC app, dalej dialog based.
Pff, a czemu nie SDI??
Jeżeli masz Document/View to wszystko jest o wiele prostsze...
Ale:
"Keyboard messages/accelerators handling in MFC dialog based applications"
http://www.codeproject.com/dialog/pretransdialog01.asp
Dzieki marcinEc, zrobilem jak tam pisza i dziala wszystko jak trza! Wielkie dzieki.