Drawtext() Text liegt unterm BackgroundBitmap



  • hi 🙂

    Ich zeichne in meinem code ein Bitmap als Hintergrund (bg=background) und dann einen Text. Wenn ich den Code dann ausführe liegt jedoch immer das Bild vor dem Text (sprich der Text ist garnicht sichtbar). Wenn ich den code zum Zeichnen des Bitmaps entferne sehe ich den Text.

    Wie sage ich dem Programm das es den Text vor dem Bild zeichen soll? Warum werden die zwei Sachen den von Windows anders gezeichnet als es im code steht? *confused* 😕

    case WM_PAINT:
    		{
    			// Draw Backgroundimage
    			BITMAP bm;
    			PAINTSTRUCT ps;
    
    			HDC hdc= BeginPaint(hwnd, &ps);
    
    			HDC hdcMem = CreateCompatibleDC(hdc);
    			HGDIOBJ hbmOld = SelectObject(hdcMem, bg);
    
    			GetObject(bg, sizeof(bm), &bm);
    
    			BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
    
    			SelectObject(hdcMem, hbmOld);
    			DeleteDC(hdcMem);
    
    			EndPaint(hwnd, &ps);
    
    			// Draw some Text
    			RECT txtrect;
    			GetClientRect(hwnd, &txtrect);
    			hdc = BeginPaint(hwnd, &ps);
    			SetBkColor(hdc, RGB(255,0,0));
    			SetTextColor(hdc, RGB(255,255,255));
    			{
    				DrawText(hdc, TEXT("SOMETEXT"), 8, &txtrect, DT_WORDBREAK);
    			}
    			EndPaint(hwnd, &ps);
    		}
    		break;
    


  • was mir auf den ersten blick komisch vorkommt sind deine 2 BeginPaint und EndPaint.



  • gluestick schrieb:

    hi 🙂

    Ich zeichne in meinem code ein Bitmap als Hintergrund (bg=background) und dann einen Text. Wenn ich den Code dann ausführe liegt jedoch immer das Bild vor dem Text (sprich der Text ist garnicht sichtbar).

    Der Text ist nicht sichtbar weil er nicht nach der Bitmap dargestellt wird sondern wiel er wohl gar nicht dargestellt wird.

    Wie von vlad_tepesch angesprochen hat das mit dem Begin und Endpaint zu tun.

    Pack alles in ein Begin und End hinein


  • Mod

    Genau! Dadurch das bereits einmal BeginPaint/EndPaint aufgerufen wurde ist das Paintrect leer und wir dgar nicht gezeichnet. WM_PAINT zeichner nur die Bereiche einmal, die auch gezeichnet werden müssen, und validiert diese anschließend.


Anmelden zum Antworten