Texthintergrund?



  • Hallo,

    Ich wollte mal fragen, ob mir jemand sagen kann, wie ich die Hintergrundfarbe von Text ändern kann?

    Ich benutze den dev-c++ falls das von bedeutung ist

    Danke im VOrraus

    MfG Lorun



  • hi,

    kommt drauf an wie du den text ausgibtst. als static element, als edit-box, mittels drawtext oder textout?

    gruss
    msp



  • Imo benutze ich TextOut.

    Aber im prinzip ist es egal.



  • Nö, eigentlich ist es nicht egal. Wenn Du nen static-element oder ne editbox nimmst, dann ist das control dafür verantwortlich und dieses schickt Nachrichten an das Parent-Fenster, wenn es zeichnen will um die Hintergrundfarbe zu erfragen, bei einem Edit-Control z.B. WM_CTLCOLOREDIT.
    Wenn Du per DrawText oder Textout selbst einen Text ausgibst, dann wird die Hintergrundfarbe des DCs dafür verwendet. Diese kannst Du mit SetBkColor ändern. Wenn Du willst, dass der Text mit transparentem Hintergrund auf das bereits gezeichnete ausgeben wird, dann kannst Du mit SetBkMode den Hintergrund auf TRANSPARENT setzen.



  • Ah ok danke^^ hat geklappt nun hab ich ein weiteres Problem :

    Und zwar soll im folgenden code die WM_CHAR nachricht ausgelöst werden. das geht auch super, solange ich die WM_COMMAND nicht ausgelöst habe, ich brauch die aber danach^^ ( die funktion die die WM_CHAR erfüllt ist nur zu textzwecken^^ )

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
    
    	static 	HWND			hClose, hQuadGlei;
    			int 			ixKoordButton = 10, iyKoordButton = 10;
    			int				iHeight = 25, iWidth = 80;
    	static 	RECT			rect;
    
    	switch(message) {
    		case WM_CREATE: {
    			rect.left 		= 110;
    			rect.top 		= 60;
    			rect.right		= 670;
    			rect.bottom		= 450;
    
    			hClose = CreateWindow(
    				"button",
    				"Beenden",
    				WS_CHILD | WS_VISIBLE,
    				ixKoordButton,
    				iyKoordButton,
    				iWidth,
    				iHeight,
                	hWnd,
                    NULL,
                    ((LPCREATESTRUCT) lParam) -> hInstance,
                    NULL
    			);
    			ixKoordButton += 90;
    			hQuadGlei = CreateWindow(
    				"button",
    				"Quadratische Gleichung",
    				WS_CHILD | WS_VISIBLE,
    				ixKoordButton,
    				iyKoordButton,
    				iWidth + 90,
    				iHeight,
                	hWnd,
                    NULL,
                    ((LPCREATESTRUCT) lParam) -> hInstance,
                    NULL
    			);				
             	return 0;
    		}
    		case WM_CHAR: {
    			MessageBox(NULL, "NIX", "Ha, ha, ha, ha...", MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1);	
    			return 0;				
    		}
    		case WM_COMMAND: {
    			if ( lParam == (LPARAM)hClose && HIWORD(wParam) == BN_CLICKED ) {
    				PostQuitMessage(0);
    			}
    			else if ( lParam == (LPARAM)hQuadGlei && HIWORD(wParam) == BN_CLICKED ) {
    				HDC hDC = GetDC(hWnd);
    
    					const char cQuadTopic[] 	= 	"Quadratische Gleichung";
    					DrawText(hDC, cQuadTopic, strlen(cQuadTopic), &rect, DT_CENTER);
    
    					const char cQuadDesc_1[] 	= 	"Form der Gleichung :     ax² + bx + c";	
    					TextOut(hDC, rect.left, rect.top + 40, cQuadDesc_1, strlen(cQuadDesc_1));
    
    					MoveToEx(hDC, rect.left + 30, rect.top + 70, NULL); LineTo(hDC, rect.right - 30, rect.top + 70);
    
    					RoundRect(hDC, rect.left + 130, rect.top + 85, rect.left + 200, rect.top + 110, 10, 10);
    					TextOut(hDC, rect.left + 135, rect.top + 90, "a = ", strlen("a = "));
    
    					RoundRect(hDC, rect.left + 230, rect.top + 85, rect.left + 300, rect.top + 110, 10, 10);
    					TextOut(hDC, rect.left + 235, rect.top + 90, "b = ", strlen("b = "));
    
    					RoundRect(hDC, rect.left + 330, rect.top + 85, rect.left + 400, rect.top + 110, 10, 10);
    					TextOut(hDC, rect.left + 335, rect.top + 90, "c = ", strlen("c = "));
    				ReleaseDC(hWnd, hDC);	
    			}
    			return 0;
    		}
    		case WM_LBUTTONDOWN: {
    			if ( LOWORD(lParam) <= rect.left + 200 && LOWORD(lParam) >= rect.left + 130 && HIWORD(lParam) <= rect.top + 110 && HIWORD(lParam) >= rect.top + 85 ) {			
    				bQuadGleiA = true;
    			}
    			return 0;
    		}
    		case WM_PAINT: {
    			PAINTSTRUCT		ps;
    			HDC				hDC;
    
    			hDC = BeginPaint(hWnd, &ps);
    
    				SetBkMode(hDC, TRANSPARENT);
    
    				RoundRect(hDC, 100, 50, 680, 460, 10, 10);
    
    			EndPaint(hWnd, &ps);
    
    			return 0;
    		}
    		case WM_DESTROY: {
    			PostQuitMessage(0);
    			return 0;
    		}
    
    	}
    	return DefWindowProc(hWnd, message, wParam, lParam);
    }
    


  • Lorun schrieb:

    Und zwar soll im folgenden code die WM_CHAR nachricht ausgelöst werden. das geht auch super, solange ich die WM_COMMAND nicht ausgelöst habe, ich brauch die aber danach^^

    Was genau meinst du damit?
    BTW: Zeichnen sollte man normalerweise immer nur direkt in WM_PAINT...



  • flenders schrieb:

    BTW: Zeichnen sollte man normalerweise immer nur direkt in WM_PAINT...

    Jop, oder Du legst Dir einen Memory-DC an, in dem Du dann zeichnen kannst, wann Du willst und blittest in WM_PAINT jeweils immer die Update-Region aus dem Memory-DC in Dein Fenster-DC.


Anmelden zum Antworten