Witam,
jako że nie zmieściło się w temacie już precyzuję o co mi chodzi. Mam problem, chcę stworzyć aplikację (coś w stylu painta) i nie mogę poradzić sobie z migotaniem obrazu podczas rysowania. Znalazłem na stronce Dark Cult of C++ http://darkcult.gamedev.pl/kursy/apianim.html jak rozwiązać ten problem, tylko niestety to mi nie działa, dalej miga, a w dodatku wyświetlany obraz jest monochromatyczny - czarny i biały : (. Zaznaczam, że nie chcę korzystać z żadnego MFC i C# i innych. Chcę to zrobić w czystym win32 api w C++.
Kod w funkcji przetwarzającej komunikaty:
case WM_MOUSEMOVE:
m_mouseX = GET_X_LPARAM( lParam );
m_mouseY = GET_Y_LPARAM( lParam );
InvalidateRect( m_hWnd, NULL, TRUE );
return 0;
case WM_PAINT:
rysuj();
ValidateRect( m_hWnd, NULL );
return 0;
Oto funkcja odpowiedzialna za rysowanie:
CAplikacja::rysuj()
HDC hdcBufor;
HBITMAP hbmBuf, hbmOldBuf;
PAINTSTRUCT ps;
POINT p1 = { 0 };
p1.x = 10;
p1.y = 10;
wchar_t napis[40] = { 0 };
swprintf_s( napis, 40, L"mouseX = %d, mouseY = %d", m_mouseX, m_mouseY );
HDC hDC = NULL;
hDC = BeginPaint( m_hWnd, &ps );
hdcBufor = CreateCompatibleDC( hDC );
hbmBuf = CreateCompatibleBitmap( hdcBufor, ps.rcPaint.right, ps.rcPaint.bottom );
hbmOldBuf = ( HBITMAP ) SelectObject( hdcBufor, hbmBuf );
FillRect(hdcBufor, &( ps.rcPaint ), ( HBRUSH ) GetStockObject( WHITE_BRUSH ) );
TextOut( hdcBufor, 30, 20, napis, 40);
HBRUSH newBrush = CreateHatchBrush( HS_BDIAGONAL, RGB ( 0, 0, 0 ) );
HGDIOBJ oldBrush = SelectObject( hdcBufor, ( HGDIOBJ )newBrush );
SetBkColor( hdcBufor, RGB ( 120, 120, 120 ) );
SetBkMode( hdcBufor, OPAQUE );
Rectangle( hdcBufor, p1.x, p1.y, m_mouseX, m_mouseY );
SelectObject( hdcBufor, oldBrush );
BitBlt ( hDC, 0, 0, ps.rcPaint.right, ps.rcPaint.bottom, hdcBufor, 0, 0, SRCCOPY );
SelectObject( hdcBufor, hbmOldBuf );
DeleteObject ( hbmBuf );
DeleteObject( newBrush );
EndPaint( m_hWnd, &ps );
}
m_hWnd - uchwyt do okna
m_mouse[X/Y] - współrzędne myszki