[C++][WinAPI][GDI+] Miganie grafiki w oknie
Ostatnio zmodyfikowano 2016-10-30 20:22
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: case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint( hwnd, & ps ); displayImage( loadedScreen, hwnd ); EndPaint( hwnd, & ps ); break; } Funkcja displayImage (wyświetlająca): 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: 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" ); |
|
« 1 » |