Frage

Falls WM_KEYDOWN hat eine messagebox() um die Funktionalität dieses Falles zu verstehen.

kann mir jemand helfen, warum dieser Fall nicht geantwortet hat?

Ich versuche, dies zu debuggen, während ich einen Buchstaben von Tastatur und Debugger einfüge, der nicht angezeigt wird WM_KEYDOWN Fall.

Danke an alle!

das ist mein Code:

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
  switch( msg )
  {
  case WM_CREATE:
    break;
  case WM_COMMAND:
    break;
  case WM_KEYDOWN:
    MessageBox(NULL,L"test",L"Information",MB_ICONINFORMATION);
    break;
  case WM_DESTROY:
    // DESTROY WINDOW
    break;
  default:
    return DefWindowProc( hwnd, msg, wParam, lParam );
  }
  return  0;
}
War es hilfreich?

Lösung

MessageBox() zeigt ein Popup-Dialogfeld an und führt dann eine eigene modale Nachrichtenschleife aus, um Nachrichten für dieses Dialogfeld zu bearbeiten, bis es geschlossen wird.Während der Dialog aktiv ist, gehen Ihre Tastenanschläge zu diesem Dialog und nicht zu dem Fenster, in dem Sie WndProc() angehören.Deshalb bekommst du nicht mehr WM_KEYDOWN Mails.Sie sollten nicht verwenden MessageBox() als Debugging-Tool für UI-Nachrichten, da es den Fluss von UI-Nachrichten ändert.Verwenden OutputDebugString() stattdessen.Auf diese Weise kann Ihr Debugger (oder ein externer Viewer wie SysInternals DebugView) Ihre Debugmeldungen anzeigen, ohne das Verhalten Ihrer Benutzeroberfläche zu beeinflussen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top