Fataler Fehler, aber wieso ???
-
guten abend,
wechselt und zurück.... doch gab es da ein problem das fenster wurde einwandfrei erstellt und liess sich problemlos in fullscreen und zurück schalten, doch man konnte es nicht verschieben und auch das sysmenu des fensters zeigte keine reaktion ...
also hab ich zur kontrolle eine andere anwendung genommen(die ganau das selbe macht nur das diese funktioniert) und habe beide haargenau so abgestimmt das sie letztendlich identischwaren.. und nach 2stunden
hab ichs den fehler endlich gefunden// ... WinProc() case WM_SYSCOMMAND: { switch( wParam ) { case SC_SCREENSAVE: case SC_MONITORPOWER: return 0; } return 0; <<=== FEHLER ES MUSS STATT EIN "return 0", EIN "break" hin !!! } //...meine frage ist wieso muss dort ein break stehen ???

-
WM_SYSCOMMAND verarbeitet nicht nur SC_SCREENSAVE und SC_MONITORPOWER, es ist auch für andere wichtige Sachen notwendig. Doch wenn so eine Nachricht, jetzt notwendige veränderungen erfordert, werden die bei dir nicht ausgeführt, denn du behandelst ja nur 2 davon. Es wäre jetzt natürlich total nervig, dass jeder Programmierer auf diese elementeren Nachrichten selber reagiert, deswegen gibt es die DefaultWindowProc. Sie beinhaltet die wichtigsten Nachrichten, und nur wenn man was ergänzen will, fängt man die Nachricht vorher ab (in deinem Fall z.B. dass du nicht willst, dass der Screensaver angeht). Alle Nachrichten die nicht abgefangen werden werden an die DefaultWindowProc weitergegeben, indem am Ende des switch meist sowas steht:
bla Funktion(blabla) { switch(blabla) { case WM_SYSCOMMAND: { switch( wParam ) { case SC_SCREENSAVE: case SC_MONITORPOWER: return 0; } return 0; } } return DefaultWindowProc(blabla); }Diese Funktion wird natürlich nicht aufgerufen, wenn du ein return 0; vorher machst. Mit einem break in einem switch, wird aber bekannterweise hinter das switch gesprungen, also wird die "return DefaultWindowProc(blabla);"-Anweisung noch ausgeführt.
Also: nachricht abfangen: return 0;
nachricht weitergeben: break;mfg.
-
oki, dnake fuer die antwort!
