Eventhandler für Cursor-Tasten in Visual c++

Hallo c++ Programmmierer,

ich möchte gerne eine Art Steuerung Programmieren. Für ein Auto z.B.
Was ich suche ist eine Möglichkeit verschiedene Methoden ausführen zu lassen, abhängig von der gedrückten Cursor-Taste. Ich suche schon eine ganze Weile ohne Erfolg. Ich arbeite mit Visual c++ und bin Neuling. Hat jemand eine Idee? Oder besser noch ein grobes Gerüst für diese Anforderung?

Vielen Dank und Gruß Basti

Hallo c++ Programmmierer,

ich möchte gerne eine Art Steuerung Programmieren. Für ein
Auto z.B.
Was ich suche ist eine Möglichkeit verschiedene Methoden
ausführen zu lassen, abhängig von der gedrückten Cursor-Taste.
Ich suche schon eine ganze Weile ohne Erfolg. Ich arbeite mit
Visual c++ und bin Neuling. Hat jemand eine Idee? Oder besser
noch ein grobes Gerüst für diese Anforderung?

Vielen Dank und Gruß Bast

//-----------------------------------------------------------------

Hallo Bast,
um eine Steuerung zu programmieren musst du die Acceleratoren von VC++
benutzen. Diese kannst du mit einem Hotkey und einer ID versehen. Nun musst du
nurnoch auf die Tasteneingabe reagieren. Dies tust du im „Callback Handler“.

Hoffe ich konnte dir Helfen.

Gruß Wingman223

Hallo Wingman223,

vielen Dank erstmal für die Antwort, jedoch weiß ich weder was Acceleratoren sind noch weiß ich wie ich mit dem Callback Handler umgehe. Falls du noch einen Tip hast wäre ich dir sehr dankbar. Ansonsten werde ich mich wohl selber schlau machen müssen.
Danke und Gruß Basti

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Basti,

also Acceleratoren kannst du in den Resourcen anlegen. Einfach auf „Insert/Einfügen“ gehen und dort den Eintrag „Accelerator“ auswählen. Nun dort die gewünschten Einträge erstellen die du als Tastenkombination haben willst und eine ID dafür festlegen. Dies machst du einfach in den Einstellungen. Ein Callback Handler ist (wie der name schon soweit sagt) ein Handler der auf Messages Reagiert. Sobald jemand die (im Accelerator als Tastenkombination festgelegte) Taste drückt wird eine Message zum Programm geschickt die der ID entspricht. Nun kannst du mit dem Callback Handler aud diese Message reagieren und eine Aktion ausführen lassen. Hier ist mal ein beispiel eines Callback Handlers:

LRESULT CALLBACK *dein windowhanler*_windowhandler( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_COMMAND:
switch( LOWORD( wParam))
{
case IDM_EXIT:

// !!!Hier könntest du eine Aktion ausführen lassen!!!

}
break;
case WM_GETMINMAXINFO:

// !!!Hier könntest du eine Aktion ausführen lassen!!!

case WM_DESTROY:

// !!!Hier könntest du eine Aktion ausführen lassen!!!

return 0;
}

return DefWindowProc(hWnd, msg, wParam, lParam);
}

Aber ich würde dir Raten erstmahl noch ein bischen mehr zu lernen bevor du anfängst größere Sachen zu Programmieren. Ich habe ein Brett dazu erstellt da kannst du dir gute Links holen:

http://www.wer-weiss-was.de/cgi-bin/www/service.fpl?..

Gruß Wingman223

Also nochmal vielen Dank,

Habe versucht das Umzusetzen sowohl mit der Callback funktion

LRESULT CALLBACK _windowhandler( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_COMMAND:
switch( LOWORD( wParam))
{
case ID_Move:

MessageBox(NULL, „Test“, „Test“, MB_OK );

}
break;
case WM_GETMINMAXINFO:

case WM_DESTROY:

return 0;
}

return DefWindowProc(hWnd, msg, wParam, lParam);
}

wobei ich die Taste mit der ID Move belegt habe. Ich habe es auch mit einem Ereignishandler versucht. Den ich mir im Accelerator erstellt habe.

void CWinFakDlg::open_mouth:nMove()
{
MessageBox( „Test“, „Test“, MB_OK );
}

Das Programm besteht aus einem Dialog-Fenster mit 3 Textboxen. Einem OK Button und einem Abbrechen Button. Es kompiliert auch wunderbar, aber leider passiert nichts wenn ich die eingestellte Taste drücke. habe es auch schon mit verschieden Tasten ausprobiert.

Muss ich noch was anderes beachten?

Vielen Dank nochmal für die rasche Hilfe
Gruß Basti

Hi Basti,
um auf einen Aufruf einer ID von einen Dialog zu reagieren musst du als erstes aud den Aufruf von „WM_COMMAND“ reagieren und dann die ID Abfragen. Ich habe dir das hier richtig gestellt. Brauchst nurnoch den Quellcode in dein Projekt zu kopieren:

LRESULT CALLBACK _windowhandler( HWND hWnd, UINT msg, WPARAM
wParam, LPARAM lParam)
{
switch(msg)
{
case WM_COMMAND:
if( wParam == ID_Move)
{
MessageBox(NULL, „Test“, „Test“, MB_OK );
}
break;
case WM_GETMINMAXINFO:

case WM_DESTROY:

return 0;
}

return DefWindowProc(hWnd, msg, wParam, lParam);
}

„WM_GETMAXINFO“ musst du nicht umbedingt im Callback Handler haben du kannst es eigentlich löschen aber ich habe es hier drin gelassen.Tschuldige das ich erst so spät antworte hatte in den letzten Tagen viel zu tun. Hoffe mal das ich dir ein bischen weiterhelfen konnte. Gruß

Wingman223

Vielen Dank nochmal für die Hilfe.
Alle Methoden die ich für die Steuerung brauche sind implementiert. Es funktioniert bloß die Tastensteuerung immernoch nicht. Habe den Code eingefügt. Aber wenn ich z.B. Pfeile drücke wird nur ein anderer Button im Dialogfeld aktiv, die Messagebox wird leider nicht ausgegeben. Ich habe
LRESULT CALLBACK _windowhandler( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

auch in den Header kopiert. Muss das ganze vielleicht an einer bestimmten Stelle im Code stehen?

Vielen Dank Basti

Hi Basti,
es ist nicht ganz egal wo der Callback Handler steht. Der Callback Handler MUSS vor:

INT APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, INT nCmdShow )

stehen, falls du dies überhaupt in deinem Code drin hast :stuck_out_tongue:. Wenn du willst kannst du mir auch gerne mal dein Projekt rübersenden damit ich mir das mal anschauen und korrigieren kann.

Gruß
Wingman223

Hallo Wingman,

ich bin gerade nicht in der Stadt und habe keinen Zugriff auf die Daten. Sobald ich zuhause bin versuche ich dir den Code zu schicken.

Danke für die viele Mühe

Gruß Basti

Hi Basti,
hab deine E-Mail erhalten. Prüfe das jetzt und schicke dir das dann rüber! Gruß

Wingman223