"Alt + X" Taste abfangen?
-
Dialoge rufen standardmäßig nicht die Accelatoren auf, das mußt du ihnen schon selber beibringen:
Jochen Kalmbach schrieb:
Siehe auch:
http://www.codeproject.com/dialog/pretransdialog01.asp(der Abschnitt "Using ProcessMessageFilter to handle dialog-based accelerator keys" dürfte für dich interessant sein)
-
CStoll schrieb:
Dialoge rufen standardmäßig nicht die Accelatoren auf, das mußt du ihnen schon selber beibringen
Das hat er ja jetzt genau nach Nishs Anweisung gemacht
Nur in dem CP articel fehlt leider, wie man denn die Methoden für einen Accelerator definiert...
-
Hi,
@panschev, macht nichts, es war nur ein beispiel für tasten, aber funktionieren tut es icht?BOOL CDialogDlg::PreTranslateMessage(MSG* pMsg ) { if ((GetAsyncKeyState(VK_CONTROL)) && (GetAsyncKeyState('D'))) AfxMessageBox(L""); if(pMsg->message==WM_KEYDOWN) { //if ((GetAsyncKeyState(VK_CONTROL)) && (GetAsyncKeyState('D'))) // AfxMessageBox(L""); if(pMsg->wParam == VK_DELETE) { if(IDYES == AfxMessageBox(L"Löschen Ergebnisse?!", MB_YESNO)) this->OnClear(); } } return CDialog::PreTranslateMessage(pMsg); }
@jochen,
fehlt hier bei mir ein ::SendMessage()???
mfg
-
Was hat denn jetzt dieses Posting mit meinem Vorschlag zu tun? Wo sind hier die Acceleratoren?
-
Hallo Jochen,
jetzt hab ichs richtig gemacht!!!
Sorry, ich hab dich zu erst falsch verstanden gehabt mit dem IDR_ACCELERATOR1 den ich beim ersten versucht habe!Das läuft jetzt!
BEGIN_MESSAGE_MAP(CDialogApp, CWinApp) //{{AFX_MSG_MAP(CDialogApp) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG ON_COMMAND(ID_HELP, CWinApp::OnHelp) ON_COMMAND(ID_ACC, OnAcc) // ID_ACC, ist der Wert aus dem Accelerator( den ich bis jetzt versucht habe -> IDR_ACCELERATOR1 // ON_COMMAND(IDR_ACCELERATOR1) END_MESSAGE_MAP()
Danke noch mal !
pixel
-
Hi nochmal,
Sondern hier musst Du die ID des speziellen Accelerators angeben!!!
Also z.B. ID_MYACCELERATOR1
den Du zuvor in den Ressourcen definiert hast (in einer Zeile):
ID_MYACCELERATOR1 Ctrl A VIRTKEY // den hab ich genommen!!!!Jetzt gehts!
mfg
pixel
-
Super!!! Und jetzt ist es auch "richtig" gelöst...
-
ja
*lol*
-
Hallo,
zur Info, ich wollte eine bestimmte Tastenkombination abfangen, wie z.B. Alt + C, es klappt auch fast richtig, nur:
Es wird manchmal ein Fehler angezeigt beim schliessen über den x-Button, im System Menu, des Dialogs?Und das auch nicht immer, dass ist die Fehlerzeile auf die gezeigt wird:
BOOL CDialogApp::ProcessMessageFilter(int code, LPMSG lpMsg) { if(m_haccel) { if (::TranslateAccelerator(m_pMainWnd->m_hWnd, m_haccel, lpMsg)) // hier wird Fehler angezeigt, das ist die line 86 im Programm!!! { return(TRUE); } else return(FALSE); } return CWinApp::ProcessMessageFilter(code, lpMsg); }
Die Fehlermeldung ist:
Unhandled exception in ProgrammName.exe: 0x0000005: Access Violation
// Der Stack zeigt auf:
CDialogApp::ProcessMessageFilter(int 0, tagMSG * 0x0012f2fc {msg=0x00008002 wp=0x00000000 lp=0x00000000}) line 86 + 22 bytesKann ich das irgendwie abfangen, wenn der benutzer auf den Schliessen 'X' Button klickt dass dann keine Prozessmessage aufgerufen wird?
Grüsse
pixel
-
Hallo,
keiner eine Idee wie ich diesen 'X' abfangen kann ohne dass der Accelerator sich meldet?!mfg
pixel