我不明白为什么这不起作用。在消息 WM_LBUTTONDOWN 上,指针的坐标被存储。然后在 WM_MOUSEMOVE 上,如果左键按下,我希望它用原始点和鼠标现在所在的新点绘制一个椭圆。但是当我调试时没有任何反应。这是我的 WindowProc
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch (uMsg)
{
case WM_DESTROY:
{
DestroyWindow(hwnd);
PostQuitMessage(0);
break;
}
case WM_PAINT:
{
hdc = BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
break;
}
case WM_LBUTTONDOWN:
{
pnt.x = GET_X_LPARAM(lParam);
pnt.y = GET_Y_LPARAM(lParam);
break;
}
case WM_MOUSEMOVE:
{
if(wParam == MK_LBUTTON)
{
hdc = BeginPaint(hwnd, &ps);
Ellipse(hdc, pnt.x, pnt.y, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)); // nothing happens
EndPaint(hwnd, &ps);
}
break;
}
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
最佳答案
您没有使窗口的任何区域无效,因此 BeginPaint
不会做任何事情。您应该将点存储在 WM_MOUSEMOVE 上(与 pnt
类似的结构),并调用 InvalidateRect()当时。然后,在 WM_PAINT 中进行绘画。看这个link了解更多信息。
关于c++ - 调整椭圆大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6119288/