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..


  • Mod

    ... 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 entweder

    return 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.


Anmelden zum Antworten