c++ - 调整椭圆大小

标签 c++ winapi gdi+ gdi

我不明白为什么这不起作用。在消息 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/

相关文章:

c - Windows Defender 防病毒 API

c++ - 在调用进程的上下文中通过 win32 执行批处理,从而保留环境变量

c++ - FillRectangle 出现轻微不合需要的透明度

c# - 当父 NT 服务被终止/崩溃时终止子进程

c# - 从流中打开的图像与从文件中打开的图像不同

C++ GetTextExtentPoint32 未给出正确的大小

c++ - 带字符串文字的自动

c++如何为类的模板化转换运算符指定参数

c++ - 以标准用户身份打开默认浏览器 (C++)

c++ - 使用 WINAPI 检测 USB 存储连接