![]() |
Anzeige:
|
|
|||||||
| C/C++, Visual C++, Visual C++.NET Fragen und Antworten zu C/C++, Visual C++ und Visual C++.NET |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Gast
Beiträge: n/a
|
Hallo Visual c++ Freunde,
ich bin neuling und möchte einen Eventhandler erstellen, der darauf reagiert, dass ich z.B. die Pfeiltasten drücke. Erstelle ich einen Accelerator und lasse ich im Accelerator-Assistenten einen Eventhandler erstellen, so passiert trotzdem nich wenn ich die Pfeiltasten betätige. Hat jemand sonst eine andere Idee wie man Methoden auf Tastendruck starten kann. (Soll eine Fernsteuerung für z.B. ein AUto werden) Die Fahr Methoden existieren bereits und funktionieren. Nur die Pfeiltasten fehlen. Vielen Dank und Gruß newUser61 |
|
|
|
|
#2 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
|
Na diese Cursortasten sind wie STRG,Schift, ENTER, ESC usw.
Tasten denen so direkt kein Tastaturkürzel zugewiesen kann, mit WM_KEYDOWN /CWnd::OnKeyDown müsste es klappen. Peter |
|
|
|
|
|
#3 (Direktlink) |
|
Gast
Beiträge: n/a
|
Also erstmal Danke für die Antwort. ABer wie man mit WMKeyDown umgeht habe ich nicht heraus bekommen. Bei den Acceleratoren in den Ressourcen kann man ja aber die Pfeiltasten als Aktion wählen und mit einer ID versehen. Auch ein Eventhandler wird erstellt, jedoch reagiert mein Userform nicht darauf egal ob ich die Pfeiltasten oder die F Tasten wähle. Hast du sonst ein Beispiel für WMKeyDown, das in einem Userform CDialog läuft.
Danke und Gruss |
|
|
|
#4 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
|
Also entweder so:
Code:
in der H Datei
class CMyDlg : public CDialog
{
...
protected:
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
...
}
in der cpp Datei:
void CMyDlg ::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if (nChar == VK_DOWN)
AfxMessageBox("It is a down arrow key!");
if (nChar == VK_RIGHT)
AfxMessageBox("It is a right arrow key!");
if (nChar == VK_LEFT)
AfxMessageBox("It is a left arrow key!");
if (nChar == VK_UP)
AfxMessageBox("It is a up arrow key!");
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
Code:
in der H Datei
class CMyDlg : public CDialog
{
...
virtual BOOL PreTranslateMessage(MSG *);
...
}
in der cpp Datei:
BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == VK_DOWN)
...
}
return CDialog::PreTranslateMessage(pMsg);
}
Der Nachteil von OnKeyDown ist das nicht alle Testen so abgefragt werden können. Peter |
|
|
|
|
|
#5 (Direktlink) |
|
Gast
Beiträge: n/a
|
Noch einmal vielen Dank,
aber auch darauf reagiert das Userform nicht. Betätige ich die Pfeil Tasten wird nur vom OK Button zum CANCEL Button gewechselt. Hast du noch eine Idee woran das liegen könnte? Gruss NewUser61 |
|
|
|
|
#6 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.05.2004
Ort: Düsseldorf
Beiträge: 1.672
|
Wenn beide Funktionen auf die Taste ansprechen, davon gehe ich mal aus,
must du die erste Funktion mit return beenden, und bei der 2 Funktion ein TRUE zurückgeben. Die Stnadardbehandlungsfunktion sollte nicht aufgerufen werden. Also CDialog::OnKeyDown und CDialog::PreTranslateMessage solltest du nicht aufrufen wenn die Nachricht von dir verarbeitet wurde. Peter |
|
|
|
|
|
#7 (Direktlink) |
|
Gast
Beiträge: n/a
|
Vielen Dank,
jetzt funktioniert es mit der 2. Variante. ABer eine der Methoden reicht ja aus. Gruss NewUser61 |
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|