Tastendruck simulieren
-
Hallo,
wie schaff ich es, wenn ich in einer Dialog-basierten Anwendung eine Taste drücke (z.B. 5), dass dies dann in mein Editfeld auf dem Dialog übernommen wird und der entsprechende Button mit der Aufschrift der gedrückten Taste kurz gedrückt wird? (Als Beispiel sei der Windows-Taschenrechner erwähnt - genau so sollte das bei mir aussehen).
Ich habe mir schon einige Einträge aus dem Archiv angesehen, doch die haben bei mir nicht funktioniert.
Folgender Code z.B. hat mir immer die entsprechende Zahl in dreifacher Ausfertigung ausgegeben, wenn ich die Zahl über die Tastatur eingebe. (Über den Button per Mausklick funktioniert's aber einwandfrei!)Code:
#define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) BOOL CWinCalcDlg::PreTranslateMessage(MSG* pMsg) { if ( KEY_DOWN(VK_NUMPAD1) ) OnButton1(); else if ( KEY_DOWN(VK_NUMPAD2) ) OnButton2(); else if ( KEY_DOWN(VK_NUMPAD3) ) OnButton3(); else if ( KEY_DOWN(VK_NUMPAD4) ) OnButton4(); else if ( KEY_DOWN(VK_NUMPAD5) ) OnButton5(); else if ( KEY_DOWN(VK_NUMPAD6) ) OnButton6(); else if ( KEY_DOWN(VK_NUMPAD7) ) OnButton7(); else if ( KEY_DOWN(VK_NUMPAD8) ) OnButton8(); else if ( KEY_DOWN(VK_NUMPAD9) ) OnButton9(); else if ( KEY_DOWN(VK_NUMPAD0) ) OnButton0(); else if ( KEY_DOWN(VK_DECIMAL) ) OnBUTTONkomma(); return CDialog::PreTranslateMessage(pMsg); } // Beispiel für Behandlungsroutine void CWinCalcDlg::OnButton0() { UpdateData(TRUE); m_Edit_ergebnis += "0"; //m_Edit_ergebnis entspricht Editfeld UpdateData(FALSE); }Bin um jede Hilfe dankbar!
-
Als erstes würde ich abfangen, dass die Controls den Fokus nicht bekommen können.
Als zweites die Tasten in die Acceleratortabelle eintragen, so dass, egal, ob die Messages vom Buttondruck oder der Tastatur kommen, immer WM_COMMAND-Messages ausgelöst werden.