Frage zu Acceleratortable...
-
Hallo zusammen,
ich wollte mal fragen wie ich eine Acceleratortable mit einer Dialog-Anwendung verbinde. Mit Icon läuft dat ja so:(alles im Konstruktor der Dialogklasse)
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//m_hIcon ist HICONWie mache ich das mit einer Acceleratortable??(so geht es nicht)
LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACC));Es liegt vielleicht daran das ich ein Handle von Acceleratortable in meiner Dialog-Klasse haben muss, ähnlich wie mit dem Icon(HICON).
Wie heisst der Typ für das Handle des Acceleratortable?
Oder ist mein Ansatz komplett falsch?
-
So müsste es gehen:
class CMyDialog : public CDialog { ... HACCEL m_hAccel; } CMyDialog::CMyDialog() ... { ... m_hAccel = NULL } CMyDialog::OnInitDialog() { ... m_Accel = LoadAccelerators(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MYACCELERATORS)); } BOOL CMyDialog::PreTranslateMessage(MSG* msg) { if (m_hAccel != NULL && msg->message >= WM_KEYFIRST && msg->message <= WM_KEYLAST) { if (::TranslateAccelerator(m_hWnd, m_Accel, msg)) return TRUE; return CDialog::PreTranslateMessage(msg); }
-
Danke, nur noch eins:
Und wo frage ich dann die Tastaturkürzel ab??
Welches Ereignis soll ich nehmen?
-
Genau wie beim CView:
class CMyDialog : public CDialog { ... HACCEL m_hAccel; afx_msg void OnMyCommand(); } BEGIN_MESSAGE_MAP(CMyDialog, CDialog) ON_COMMAND(ID_MYCOMMAND, OnMyCommand) ... END_MESSAGE_MAP() void CMyDialog::OnMyCommand() { }Und in der Accelerator-Tabelle IDR_MYACCELERATORS verknüpfst du dann ID_MYCOMMAND mit der gewünschten Tastenkombination.