BitBlt und gegen flimmern



  • Hallo!

    Hab ein problem:

    // in InitInsatnce
       HDC dc = GetDC(g_hWnd);
       HDC g_RenderDC = CreateCompatibleDC(dc);
       HBITMAP g_RenderScreen = CreateCompatibleBitmap(dc, 800, 600);
       HBITMAP g_OldBitmap = (HBITMAP)SelectObject(g_RenderDC, g_RenderScreen);
       ReleaseDC(g_hWnd, dc);
    
    // in WM_PAINT:
      hdc = BeginPaint (hWnd, &ps);
      TextOut(g_RenderDC, 100, 100, "Dies ist ein Text", 10);
      if(!BitBlt(ps.hdc, 0, 0, 800, 600, g_RenderDC, 0, 0, SRCCOPY))
    	int i = 1;  // Fehler!, wird aber nie erreicht, BitBlt klappt also 
      EndPaint( hWnd, &ps );
    

    Ich will also erst alles in eine Bitmap blitten, und die dann mit einem mal ins Fenster zeichnen, dass das nciht so flimmert. Aber, das problem ist, dass das, was ich zeichne, nicht angezeigt wird, also, man sieht nichts im Fenster. Woran kann das liegen?

    Gruß, MAxi



  • Kann daran liegen, dass bei deinem GetDC Aufruf, das Fenster noch nicht erstellt wurde, und der DC ungültig ist, versuchs mal so in WM_PAINT:

    hdc = BeginPaint (hWnd, &ps);   
    HDC g_RenderDC = CreateCompatibleDC(hdc);
    HBITMAP g_RenderScreen = CreateCompatibleBitmap(dc, 800, 600);
    TextOut(g_RenderDC, 100, 100, "Dies ist ein Text", 10);
    if(!BitBlt(hdc, 0, 0, 800, 600, g_RenderDC, 0, 0, SRCCOPY))
        int i = 1;  // Fehler!, wird aber nie erreicht, BitBlt klappt also 
    DeleteDC(g_RenderDC);
    EndPaint( hWnd, &ps );
    

    Gruß,
    Kevin



  • Du musst die Variablen g_RenderDC (und auch die anderen) static oder zur Not auch global machen, damit du später noch auf ihren Inhalt zugreifen kannst.


Anmelden zum Antworten