WM_KEYDOWN funktioniert nicht mehr nach Benutzen eines Buttons oder einer Editbox, help!
-
jo die vom mainWindow.. aber ich weiss nicht was ich da rein baun muss das das mit dem focus klappt
-
T0bi schrieb:
jo die vom mainWindow.. aber ich weiss nicht was ich da rein baun muss das das mit dem focus klappt
Dann versuche zu verstehen was TranslateMessage, IsDialogMessage und TranslateAccelerator tun. Dann kommst Du vieleicht drauf...
-
also da ich nicht mit einem dialog arbeite brauch IsDialogMessage auch nicht, richt? hm anscheind muss ich dann also eine accel tabele anlegen... aber wie macht man sowas?
Ok man braucht CreateAcceleratorTable() und ACCEL, wobei accel ein array sein muss oder? nur wo und wie mach ich definition von accel ?
-
Hm ich hab mich jetzt mal daran probiert aber es tut sich nichts, wenn ich die taste drücke. Hier mal die Teile wo ich jetzt was gemacht habe:
(1) der header für die IDs
//////////////////////////////////////////////////////////////////////////////// // ACCELERATOR #define ID_ACCEL_ESC 7000 #define ID_ACCEL_UP 7001 #define ID_ACCEL_DOWN 7002 #define ID_ACCEL_LEFT 7003 #define ID_ACCEL_RIGHT 7004(2) die .rc datei
//////////////////////////////////////////////////////////////////////////////// // ACCELERATOR accelTabel ACCELERATORS BEGIN VK_ESCAPE, ID_ACCEL_ESC VK_UP, ID_ACCEL_UP VK_DOWN, ID_ACCEL_DOWN VK_LEFT, ID_ACCEL_LEFT VK_RIGHT, ID_ACCEL_RIGHT ENDin der main .cpp datei
// ... // ***** load accelerators ***** hAccel = LoadAccelerators( hInstance, "accelTable" ); while( !done ) { if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ) { if( msg.message == WM_QUIT ) { done = true; } else { if( !( TranslateAccelerator( hWnd, hAccel, &msg ) ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } } } } // ... // in der command // ***** accelerators ***** case ID_ACCEL_UP: { if( rX < 360.0f ) rX += 3.0f; if( !bFull ) { SetScrollPos( hScroll_rx, SB_CTL, rX, true ); } break; } case ID_ACCEL_DOWN: { if( rX > 0.0f ) rX -= 3.0f; if( !bFull ) { SetScrollPos( hScroll_rx, SB_CTL, rX, true ); } break; } case ID_ACCEL_LEFT: { if( rY > 0.0f ) rY -= 3.0f; if( !bFull ) { SetScrollPos( hScroll_ry, SB_CTL, rY, true ); } break; } case ID_ACCEL_RIGHT: { if( rY < 360.0f ) rY += 3.0f; if( !bFull ) { SetScrollPos( hScroll_ry, SB_CTL, rY, true ); } break; }hm was ist jetzt noch net richtig?
-
hab ich vieleicht die accelerator tabelle falsch definiert?
-
T0bi schrieb:
hab ich vieleicht die accelerator tabelle falsch definiert?
Sieht gut aus!
1. Wird hAccel geladen? Ich sehe keine Fehlerbehandlung!
2. Bei TranslateAccelerator musst Du das Window Handle angeben, das die WM_COMMAND Handler für Deine Accelerator IDs beherbergt.
3. Du hast dasin einem WM_COMMAND Handler eingebaut? Ich sehe diesen Codeausschnitt nicht!
4. Nur am Rande. Warum verwendest Du PeekMessage und nicht GetMessage? Diese Messageloop frisst 100% Prozessor Ressourcen!
-
1. Wird hAccel geladen? Ich sehe keine Fehlerbehandlung!
Hm anscheind kann die Tabelle nicht gladen werden, Fehler:
Der angegebene Ressourcenname wurde nicht in der Image-Datei gefunden.2. Bei TranslateAccelerator musst Du das Window Handle angeben, das die WM_COMMAND Handler für Deine Accelerator IDs beherbergt.
hWnd ist das Handle vom main Window, in desen WM_COMMAND arbeite ich auch die IDs der accels ab.
3. Du hast dasin einem WM_COMMAND Handler eingebaut? Ich sehe diesen Codeausschnitt nicht!
wie meinst du das in einem WM_COMMAND handler? Ich habs lediglich nur in die WM_COMMAND unter switch LOWORD( wParam ) geschoben.
4. Nur am Rande. Warum verwendest Du PeekMessage und nicht GetMessage? Diese Messageloop frisst 100% Prozessor Ressourcen!
Sorry habs behoben, das is bei mir noch aus dem Tutorial von NeHe hängen geblieben.
Also alle sin allem scheints beim laden der Tabelle die Probleme zu geben. Muss ich da irgendwie mit MAKEINTRESOURCE arbeiten?
Gruß Tobi.
-
Entschuldige aber langsam habe ich keine Lust mehr...
Muss man jede Zeile Code bei Dir diskutieren?
Lies den Petzold und lerne.1. Das mit dem Handler meinte ich, dass Du das als WM_COMMAND Nachricht bekommst. Ich konnte nicht sehen auf welche Nachricht Du reagierst.
2. Dann ist die Table nicht in Deiner EXE. Lade die fertige EXE mit dem Ressourcen-Editor.
-
ihat der bcb6 überhaupt nen recourssen editor? der hat doch nur nen image editor net mehr.
Egal habs jetzt hin bekomm das er die Tablle erfolgrich lädt... passiern tut trotzdem nicht...
-
OKay ich nehme alle zurück, ich danke dir wirklich vielmals für deine mühe Martin, jetzt klappt alles

Danke.
Gruß Tobi.