Fenster == Stalker... will sich nicht zeigen :(
-
wndInfo = CreateWindow( "INFO", "234", WS_VISIBLE, 100, 100, 300, 300, NULL, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL ); if( !wndInfo ) printf( "wndInfo error: %d\n", GetLastError() ); else { SendMessage( wndInfo, PM_SETINFOTEXT, 0, (LPARAM)tmp ); if( !UpdateWindow( wndInfo ) ) printf( "error: %d\n", GetLastError() ); ShowWindow( wndInfo, SW_SHOWNORMAL ); } LRESULT CALLBACK infoProc( HWND myWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { HDC myHdc; PAINTSTRUCT myPaint; static char *text; switch( msg ) { case WM_PAINT: myHdc = BeginPaint( myWnd, &myPaint ); { TextOut( myHdc, 0, 0, text, strlen( text ) ); } EndPaint( myWnd, &myPaint ); break; case PM_SETINFOTEXT: printf( "." ); text = (char*)lParam; printf( "." ); InvalidateRect( myWnd, NULL, TRUE ); break; case WM_LBUTTONUP: //ShowWindow( myWnd, SW_HIDE ); break; } }Also ShowWindow kann man echt knicken... ZUmindest in Zeile 9, denn das Fenster, bleibt versteckt...
Warum
?Ich verstehe das wirklich nicht.
Bei dem Fenster (bei dessen WM_CREATE dieses Fenster creat-et wird) klappt das:bool createMainWindow( void ) { HWND myWnd; bool returnValue = true; RECT parent; myWnd = CreateWindow( appName, //Name der Fensterklasse appTitle, //Titel des Fensters WS_VISIBLE, //Stil des Fensters CW_USEDEFAULT, //Position X CW_USEDEFAULT, //Position Y 800, //Breite 600, //Höhe NULL, //Parent NULL, //Menue myHandleInst, //Handle des Programms NULL //Zusätzliche Daten ); if( !myWnd ) returnValue = false; else { myAppWnd = myWnd; ShowWindow( myWnd, SW_SHOWNORMAL ); UpdateWindow( myWnd ); //WM_PAINT message an Fenster senden } return returnValue; }Schrecklich... Genau das selbse... HILFE..
danke.
-
was ist denn das fürn code ... wenn du WS_VISIBLE setzt kannst du dir show window sparen.
außerdem zeigt *text ins nirvana, hau mal WM_PAINT raus und schaue ob du das fenster nicht doch siehst.
-
Nein.
text wird -dank PM_SETINFOTEXT- befüllt.
WM_PAINT gibt dann den Text aus.Das mit dem ShowWindow SW_SHOWNORMAL hab ich mir gedacht, aber wenn es nicht geht teste ich lieber erstmal, bevor ich poste.
WHA HEUTE IS NICH MEIN TAG...
return in einer WNDPROC währe angebracht oder?
sry
my fault..
-
... und ein Aufruf der DefWindowProc!
-
Das ist ja bei nem Return dabei (return DefWindowProc...).
Jetzt ist aber folgendes eingetreten. Ich will eine Zeile anzeigen lassen, TEXT, also nicht eine sondern 4 stk.
TextOut versagt, also nehme ich DrawText, und jetzt geht gar nichts mehr.DrawText( myHdc, text, lstrlen( text ), &rect, DT_CENTER | DT_WORDBREAK | DT_NOCLIP );Wenn ich mit printf( "%s\n", text ); rangehe, kein problem, alles klappt, aber DrawText versagt. Kein Text zu sehen.
Warum?
-
lippoliv schrieb:
Das ist ja bei nem Return dabei (return DefWindowProc...).
nein. du solltest dich schon an die return-Werte halten, die dir in der MSDN vorgegeben werden.Jetzt ist aber folgendes eingetreten. Ich will eine Zeile anzeigen lassen, TEXT, also nicht eine sondern 4 stk.
TextOut versagt, also nehme ich DrawText, und jetzt geht gar nichts mehr.DrawText( myHdc, text, lstrlen( text ), &rect, DT_CENTER | DT_WORDBREAK | DT_NOCLIP );Wenn ich mit printf( "%s\n", text ); rangehe, kein problem, alles klappt, aber DrawText versagt. Kein Text zu sehen.
Warum?
vllt. solltest du den text-buffer befüllen bzw. überhaupt erstmal speicher allokieren. vielleicht ist deine RECT-struktur auch falsch befüllt?
-
hey schrieb:
vllt. solltest du den text-buffer befüllen bzw. überhaupt erstmal speicher allokieren. vielleicht ist deine RECT-struktur auch falsch befüllt?
LRESULT CALLBACK infoProc( HWND myWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { bool retValue = false; HDC myHdc; PAINTSTRUCT myPaint; static char *text; RECT rect = {0}; switch( msg ) { case WM_SIZE: { rect.left = 0; rect.top = 0; rect.right = LOWORD(lParam); rect.bottom = HIWORD(lParam); } case WM_PAINT: myHdc = BeginPaint( myWnd, &myPaint ); { printf( "%s\n", text ); DrawText( myHdc, text, lstrlen( text ), &rect, DT_CENTER | DT_SINGLELINE ); } EndPaint( myWnd, &myPaint ); retValue = true; break; case PM_SETINFOTEXT: printf( "." ); text = (char*)lParam; printf( "." ); InvalidateRect( myWnd, NULL, TRUE ); retValue = true; break; case WM_LBUTTONUP: ShowWindow( myWnd, SW_HIDE ); retValue = true; break; } if(!retValue) return DefWindowProc( myWnd, msg, wParam, lParam ); return retValue; }Bevor ich WM_PAINT aufrufe, wird PM_SETINFOTEXT gesendet, also ist der Buffer befüllt, was ich natürlich auch schon aus kraft gesetzt habe indem ich anmerkte, dass wenn ich
printf( "%s", text);mache er den Text anzeigt, also muss alles richtig sein.
ich bin mit diesem Tutorial zur Hilfe an die Sache ran gegangen, allerdings schreiben die auch nur Singleline, und mit Singleline hätt ich ja auch gleich TextOut machen können.
hey schrieb:
lippoliv schrieb:
Das ist ja bei nem Return dabei (return DefWindowProc...).
nein. du solltest dich schon an die return-Werte halten, die dir in der MSDN vorgegeben werden.meintest du
hey schrieb:
lippoliv schrieb:
Das ist ja bei nem Return dabei (return DefWindowProc...).
nein. du solltest dich schon an die return-Werte halten, die dir in der MSDN vorgegeben werden.
Ist auch egal, ich verstehe deine aussage nciht:
Hier siehst du auch dass entwederreturn 0;oder
return DefWindowProc(...);benutzt wird, also wieso sollte ich mich nicht daran halten? Diese Tutorials wurden mir empfohlen...
DANKE
hey schrieb:
vielleicht ist deine RECT-struktur auch falsch befüllt?
RECT rect = {0}; -->> static RECT rect = {0};So klappts auch, jetzt muss ich nur noch skallieren.
Dickes danke an alle.