【发布时间】:2012-03-18 02:40:03
【问题描述】:
我有一个程序可以在鼠标光标下绘制一个矩形并显示像素颜色,但是如果我使用 'InvalidateRect(),我无法管理它来清除 while 循环内的形状' 它清除矩形太快并且闪烁,如果不使用 'InvalidateRect()' 然后 Rectangle 会像THIS 一样不断重复,如何解决?
HWND hwnd;
POINT p;
unsigned short R=0, G=0, B=0;
void drawRect()
{
GetCursorPos(&p);
HDC hdc = GetDC(NULL);
HPEN border = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
HBRUSH background = CreateSolidBrush(RGB(R, G, B));
SelectObject(hdc, border);
SelectObject(hdc, background);
Rectangle(hdc, p.x+10, p.y+10, p.x+40, p.y+40);
DeleteObject(border);
DeleteObject(background);
}
void init()
{
while (GetAsyncKeyState(VK_RBUTTON) & 0x8000)
{
grabPixel(); //get RGB color from cursor coordination
drawRect(); //draw preview rectangle under cursor
InvalidateRect(hwnd, NULL, true);
}
}
注意:它没有 WinMain() 或 WndProc()
【问题讨论】:
-
只要记住你之前画的地方,然后把那个矩形画回背景颜色。如果你仍然看到闪烁,它应该不再明显了,然后重新绘制没有被新矩形重叠的部分。
-
不错的提示@Hans,我正在努力。