2012-04-13 3 views
0

Ich bin nicht in der Lage WM_SIZE Befehl zu bekommen, wenn ich diese Methode verwenden (oder WM_KEYUP mit gleichen return 0 in Ende):Warum erhält mein Fenster den WM_SIZE-Befehl nicht, wenn ich WM_KEYDOWN selbst handle?

case WM_KEYDOWN: { 
    keys[wParam] = 1; 
    return 0; 
} 

Aber es gibt mir Befehl WM_SIZE wenn ich diese verwenden:

case WM_KEYDOWN: { 
    keys[wParam] = 1; 
    break; 
} 

Could jemand erklärt, warum passiert das?

+0

Könnten wir die gesamte 'switch' Anweisung sehen? – Thomas

+0

@Thomas, ich ging nochmal durch die switch-Anweisung, und überraschenderweise fand ich eine Anweisung ohne 'break' am Ende, und das reparierte es! Diese ganze Sache ist auch verwirrend, ich bin mir nicht sicher, wann ich 'break' verwenden soll und wann' return 0' oder 'return 1'. Als ich den hinzugefügten 'break' Befehl mit' return 0' ersetzt habe, ist der Bug wieder aufgetaucht, nicht sicher wie das alles funktioniert ... Ideen? – Rookie

+0

Ich verstehe nicht, warum 'WM_KEYDOWN' erwartet würde, eine' WM_SIZE' Nachricht zu erzeugen. –

Antwort

2

Ohne den gesamten Code zu sehen, ist meine Vermutung, dass die return Anweisung aus der WM_KEYDOWN Nachricht verhindert auf einen Standardnachrichtenhandler übergeben wird, wie DefWindowProc(), so wird das Fenster nicht wirklich den Tastendruck verarbeiten und was auch immer Maßnahmen zu ergreifen, es braucht um WM_KEYUP und WM_SIZE Nachrichten zu generieren.

Verwandte Themen