Fenster schließt,...Programm beendet sich aber nicht
-
Hi Everbody und 'n Special Greet an Swordfish

... ->
LRESULT CALLBACK WndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam ) { switch( iMsg ) { case WM_CREATE: return 0; // wesshalb auskommentiert? case WM_PAINT: return 0; // wesshalb auskommentiert? case WM_KEYDOWN: switch( wParam ) { case VK_SPACE: // if( testTeil( 1 ) = true ) zuweisung an einen Funktionsaufruf? // // wohl eher: if( testTeil( 1 ) == true ) // oder einfach: if( testTeil( 1 ) ) { // MessageBox( hwnd, "blabla", "Error", iMsg ); // die gesendete Message als Style für die MessageBox!? MessageBox( hwnd, "blabla", "Error", MB_OK ); } return 0; } return 0; // fehlt meines Erachtens. case WM_DESTROY: PostQuitMessage( 0 ); return 0; // fehlt meines Erachtens. // default: \ _ Überflüssig // break; / da "default" sowieso return DefWindowProc (hwnd, iMsg, wParam, lParam); sein sollte } return DefWindowProc (hwnd, iMsg, wParam, lParam); }daraus würd ich mal das machen:
LRESULT CALLBACK WndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam ) { switch(iMsg) { case WM_KEYDOWN: switch(wParam) { case VK_SPACE: if(testTeil(1)) // bei einer Anweisung sind KLammern hier überflüssig MessageBox( hwnd, "blabla", "Error", MB_OK ); break; } break; case WM_CLOSE: // bekommt deine App. beim Klick auf das 'X'...das // fehlt meiner Meinung nach in deiner WndProc...siehe // auch Beschreiobung der MSDN zu WM_CLOSE (kein Bock zu tippen :-D ) case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc (hwnd, iMsg, wParam, lParam)); } return (0); }Ein break heißt dann immer 'return (0)' (Klammern sind hier nat. nur Schönheit) - auch sehr wichtig -

-
CodeFinder schrieb:
... case WM_CLOSE: // bekommt deine App. beim Klick auf das 'X'...das // fehlt meiner Meinung nach in deiner WndProc...siehe // auch Beschreiobung der MSDN zu WM_CLOSE (kein Bock zu ...probier dies:
... case WM_CLOSE: ExitProcess(0); ...der prozess ist schneller weg als du gucken kannst

break, return, etc. ist alles nicht nötig nach 'ExitProcess()'
-
aber nicht sehr schön

-
CodeFinder schrieb:
aber nicht sehr schön

was heisst 'schön'

schnell und wirkungsvoll muss es sein
-
-
Swordfish schrieb:
Servus CodeFinder, auch wieder 'mal da?
Greetz, Swordfish
Jo, war im Urlaub :p
Danke für die Weiterleitung

-
net schrieb:
probier dies:
... case WM_CLOSE: ExitProcess(0); ...der prozess ist schneller weg als du gucken kannst

break, return, etc. ist alles nicht nötig nach 'ExitProcess()'Danke hat wunderbar funktioniert!!
So wie es aussiehrt ist mein Fehler jetzt weg. Ich muss noch ein paar Tests machen, aber bis jetzt ist der Fehler nicht mehr aufgetaucht.
-----------
edit: ich habe nur ein paar Emutionen gelöscht als ich gemerkt habe, dass das Programm nicht funktioniert
-
Falscher Alarm!!
nach intensiven testen habe ich gemerkt, dass der Fehler doch noch auftritt.

Es schließt sich nicht einmal das Fenster, das Programm stürzt einfach ab.
Ich könnte heulen!!
-
Hast dus mal mit meiner (konvetiuonellen) Methode gemacht, also ohne ExitProcess(0) ?
-
nein habe ich nicht, ich wüßte auch garn nicht mit welchen.
wie es scheint, könnte es ja sein, dass du mehr weisst wie ich

darum danke ich dir jetzt schon einmal!!!
-
LOL ?!, na so, wie ich schon mal gepostet hab:
CodeFinder schrieb:
Hi Everbody und 'n Special Greet an Swordfish

... ->
LRESULT CALLBACK WndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam ) { switch( iMsg ) { case WM_CREATE: return 0; // wesshalb auskommentiert? case WM_PAINT: return 0; // wesshalb auskommentiert? case WM_KEYDOWN: switch( wParam ) { case VK_SPACE: // if( testTeil( 1 ) = true ) zuweisung an einen Funktionsaufruf? // // wohl eher: if( testTeil( 1 ) == true ) // oder einfach: if( testTeil( 1 ) ) { // MessageBox( hwnd, "blabla", "Error", iMsg ); // die gesendete Message als Style für die MessageBox!? MessageBox( hwnd, "blabla", "Error", MB_OK ); } return 0; } return 0; // fehlt meines Erachtens. case WM_DESTROY: PostQuitMessage( 0 ); return 0; // fehlt meines Erachtens. // default: \ _ Überflüssig // break; / da "default" sowieso return DefWindowProc (hwnd, iMsg, wParam, lParam); sein sollte } return DefWindowProc (hwnd, iMsg, wParam, lParam); }daraus würd ich mal das machen:
LRESULT CALLBACK WndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam ) { switch(iMsg) { case WM_KEYDOWN: switch(wParam) { case VK_SPACE: if(testTeil(1)) // bei einer Anweisung sind KLammern hier überflüssig MessageBox( hwnd, "blabla", "Error", MB_OK ); break; } break; case WM_CLOSE: // bekommt deine App. beim Klick auf das 'X'...das // fehlt meiner Meinung nach in deiner WndProc...siehe // auch Beschreiobung der MSDN zu WM_CLOSE (kein Bock zu tippen :-D ) case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc (hwnd, iMsg, wParam, lParam)); } return (0); }Ein break heißt dann immer 'return (0)' (Klammern sind hier nat. nur Schönheit) - auch sehr wichtig -

-
@CodeFinder... unsauberer Codestyle... evt. mal Warnings Level-4 anstellen und sehen was der zu deinem gecode sagt

-
(D)Evil schrieb:
@CodeFinder... unsauberer Codestyle... evt. mal Warnings Level-4 anstellen und sehen was der zu deinem gecode sagt

Oh What?! ^^
Hm HowTo ? (MS Visual C++ 6.0)
-
Hm ok, habs gefunden einfach in den Linker Options

/WARN:LEVELangeben
wobei LEVEL dann die Warn-Stufe angibt...Aber bei mir zeigt er keine Warnungen an
, ...was meinst du denn genau (mit'unsauberen Codestyle')?
-
default: return (DefWindowProc (hwnd, iMsg, wParam, lParam)); } return (0); }Hmm so kann man es auch machen(also das mit den Warnings ;))...
In dem oben zitierten Quellcode:
return (0); wird NIE erreicht...
-
Doch klar nämlich immer, wenn eine Message bearbeitet wurde; break wirft mich doch aus dem switch heraus, und 'springt' dann hinter das switch, also da wo direkt 'return (0)' steht...
Die DefWindowProc()-Funktion wird nur dann aufgerufen, wenn eine Nachricht nicht im Switch steht, und so solls ja auch sein

PS: Hab auch nochmal EXPLIZIT getestet...funktioniert perfekt...glaub da haste dich verhaspelt

Edit: Das PS und n Vertipper.
-
DANKE!!! für alle Hilfren, aber es funktioniert noch immer nicht.
Ich denke es ist nun wirklich ein reines DirectX Problem.
Vielleicht kennt sich von euch jemand mit Webcamprogrammierung aus und kann m,ir da vielleicht weiterhelfen.
Hier geht es weiter:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-153440.html