Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++][WinAPI][GDI+] Miganie grafiki w oknie

Ostatnio zmodyfikowano 2016-10-30 20:22
Autor Wiadomość
programirer
Temat założony przez niniejszego użytkownika
[C++][WinAPI][GDI+] Miganie grafiki w oknie
» 2016-10-30 20:22:45
Witam,

Mój problem jest następujący: Gdy poruszam oknem po krawędzi ekranu, cała grafika miga. Jaki jest na to sposób? Używam GDI+. Moja obsługa WM_PAINT wygląda tak:
C/C++
case WM_PAINT:
{
    PAINTSTRUCT ps;
    HDC hdc = BeginPaint( hwnd, & ps );
    displayImage( loadedScreen, hwnd );
    EndPaint( hwnd, & ps );
    break;
}


Funkcja displayImage (wyświetlająca):
C/C++
void displayImage( HBITMAP mBmp, HWND mHwnd )
{
    RECT myRect;
    BITMAP bm;
    HDC screenDC, memDC;
    HBITMAP oldBmp;
    BLENDFUNCTION bf;
   
    GetObject( mBmp, sizeof( bm ), & bm );
   
    bf.BlendOp = AC_SRC_OVER;
    bf.BlendFlags = 0;
    bf.SourceConstantAlpha = 0xff;
   
    bf.AlphaFormat = AC_SRC_ALPHA;
   
    screenDC = GetDC( mHwnd );
    GetClientRect( mHwnd, & myRect );
   
    if( mBmp == NULL )
         FillRect( screenDC, & myRect, WHITE_BRUSH );
   
    else
    {
        memDC = CreateCompatibleDC( screenDC );
        oldBmp =( HBITMAP ) SelectObject( memDC, mBmp );
        AlphaBlend( screenDC, 0, 0, myRect.right, myRect.bottom, memDC, 0, 0, bm.bmWidth, bm.bmHeight, bf );
        SelectObject( memDC, oldBmp );
        DeleteDC( memDC );
        ReleaseDC( mHwnd, screenDC );
    }
}


Zmienna loadedScreen to zmienna typu HBITMAP - uchwyt do załadowanej grafiki. Czyli po prostu:
C/C++
HBITMAP mLoadImg( WCHAR * szFilename )
{
    HBITMAP result = NULL;
   
    Gdiplus::Bitmap * bitmap = new Gdiplus::Bitmap( szFilename, false );
    bitmap->GetHBITMAP( NULL, & result );
    delete bitmap;
    return result;
}


loadedScreen = mLoadImg( L"data\\img\\screen.png" );
P-153072
« 1 »
  Strona 1 z 1