Funktionen über die Tastatur (Schnellzugriff) aufrufen
-
Hallo !
Ich möchte in einer dialogfeldbasirenden App (ohne Menü) Tastaturbefehle einbauen, die dann eine belibiege Funktion aufrufen. Beispielsweise drückt der User "Strg+A" und das Programm gibt eine Meldung aus. Ich habe leider keine Idee wie ich das realisieren könnte und mit der Ressource "Zugriffstaste" komme ich nicht ganz zurecht.
-
ich glaube die funktioniert bei dialoganwendung auch nicht.
versuchs mal damit:BOOL CClientDlg::PreTranslateMessage(MSG *pMsg) { if (pMsg->message == WM_KEYDOWN) { // zur Verhinderung des Schließens über ESC if (pMsg->wParam == VK_ESCAPE) { return 0; } } return CDialog::PreTranslateMessage(pMsg); }
vielleicht steckt in lParam die zweite gedrückte taste (noch nciht ausprobiert)
-
Emperor_L0ser schrieb:
ich glaube die funktioniert bei dialoganwendung auch nicht.
versuchs mal damit: [...]Tja, ich habe bis jetzt auch keinen anderen Weg gefunden, dennoch kommt mir der Code etwas komisch vor. Hat jemand eine Idee was ich verbessern könnte ?
BOOL CMySheet::PreTranslateMessage(MSG* pMsg) { static bool bKey = false; if (pMsg->message == WM_KEYDOWN) { if (pMsg->wParam == 17) { // 17 == Strg bKey = true; } else if (bKey && pMsg->wParam == 82) { // 82 == R MessageBox("Jawoll"); bKey = false; return TRUE; } } return CPropertySheet::PreTranslateMessage(pMsg); }
So klappt es das die Tastenkombination Strg+R "erkannt" wird und man kann darauf reagieren.
Emperor_L0ser schrieb:
vielleicht steckt in lParam die zweite gedrückte taste (noch nciht ausprobiert)
Leider nein, folgendes steckt in lParam:
Value of lParam. Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table. [...]
-
...vielleicht ein bißchen spät für diesen thread aber:
ich habe ein ähnliches problem, ich will bei einer dialog app tastaturereignisse abfangen und herausfinden welche taste gedrückt wurde.ich versuche das obige beispiel zu implementieren, weiß aber nicht so recht wie ich die funktion PreTranslateMessage() aufrufen muß. Was muß ich als parameter für MSG übergeben?
Kann mir da vielleicht einer helfen?
herzlichen dank,
l00P
-
Stichwort: Accelerator
In einer dialogbasierenden Anwendung noch folgendes machen: http://www.c-plusplus.net/forum/viewtopic.php?t=39132&highlight=acc*