код
У меня есть эта проблема, я пытаюсь создать простой прямоугольник, который перемещается с помощью клавиш со стрелками (просто чтобы проверить возможности интерфейса графического устройства).
/** NOT IMPORTANT **/
// -------------------------------------------------- //
/* Globals (hey, its just a test program!) */
static int x = 0;
static int y = 0;
/** MAINLOOP **/
// All classes are just simple wrapper
// code in /* comments */ shows what the class methods internally do.
Graphics g; // HDC Wrapper
g.GetGraphics( winmodel.GetHandle() ); /* ::GetDC( hwnd ); */
HWND hwnd = winmodel.GetHandle();
// IMPORTANT PART //
//-------------------------------------------//
while(TRUE)
{
// PROBLEM HERE!!!
::InvalidateRect( hwnd, NULL, 0 ); // NOT WORKING??
::UpdateWindow( hwnd ); // NOT WORKING??
if( msg.Peek(NULL,0,0,PM_REMOVE) ) /* PeekMessage() */
{
msg.Translate(); /* ::TranslateMessage() */
msg.Dispatch(); /* ::DispatchMessage() */
}
g.Rectangle( x, y, x + 100, y + 100); /* GDI's ::Rectangle() Function */
fpsHandler.Tick(); /* while( ( GetTickCount() - start_time ) < 33 ); */
}
g.Release(); /* ::ReleaseDC( hwnd ); */
// NOT IMPORTANT //
// --------------------------------------------------------//
/** IN WNDPROC **/
// in WM_KEYDOWN
case VK_LEFT:
x--;
break;
case VK_RIGHT:
x++;
break;
case VK_UP:
y--;
break;
case VK_DOWN:
y++;
break;
Проблема
Теперь моя проблема в том, что когда прямоугольник покидает место, это место остается черным (может быть, оно не перерисовано?), Как можно видеть:
Однако черная часть исчезает, когда я минимизирую окно и загружаю его снова, поэтому, очевидно, возникает проблема с перерисовкой. Но почему он не перерисовывается, когда я использовал InvalidateRect
и UpdateWindow
? Я даже пытался ::SendMessage( hwnd, WM_PAINT, NULL, NULL );
безрезультатно. В чем проблема?