[C++ MFC] Problem z Key Accelerators

0

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?

0

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

0

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

0

Wybralem na pewno MFC app, dalej dialog based.

0
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

0

Dzieki marcinEc, zrobilem jak tam pisza i dziala wszystko jak trza! Wielkie dzieki.

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