【问题标题】:WIn API Basic Paint programWIN API 基本绘制程序
【发布时间】:2012-12-02 12:04:13
【问题描述】:

只是想学习一点 Win API。我正在尝试制作一个基本的绘图应用程序,有点像 MS Paint。

目前我试图让一个功能起作用,即当您左键单击并在屏幕上拖动鼠标时,鼠标后面会画一条线。这是我到目前为止所拥有的,但出于某种原因:

1) 线条立即开始绘制,而不是等待左键单击 2) 这条线不是很结实,很模糊。

case WM_MOUSEMOVE:
{


    if(MK_LBUTTON){
    hdc = GetDC(hwnd);
    hPen = CreatePen(PS_SOLID,5,RGB(0, 0, 255));
    SelectObject(hdc, hPen);

    int x = LOWORD(lParam);
    int y = HIWORD(lParam);

    MoveToEx(hdc,x,y,NULL);
    LineTo(hdc, LOWORD(lParam), HIWORD(lParam));
    ReleaseDC(hwnd,hdc);
    }
    else
        break;

}

}

感谢您的帮助!

【问题讨论】:

    标签: winapi mousemove


    【解决方案1】:

    WM_LBUTTONDOWN 上,您必须在程序中将变量设置为true(“是的,鼠标当前处于关闭状态),然后在您的WM_MOUSEMOVE 中检查该变量并仅将其绘制为trueWM_LBUTTONUP 然后将该变量设置为 false。(该变量应初始化为 false)。

    【讨论】:

    • 对不起,我没有按照你的说法,你能解释一下吗?谢谢您的回复
    • 当然。 WM_MOUSEMOVE 在鼠标移动时触发,不仅在移动和按下按钮时触发。因此,要仅在按钮按下时进行绘制,您首先必须让程序“记住”它是否按下。
    • 所以将 WM_LBUTTONDOWN 与 bool 或其他东西一起使用,当它等于 true 时触发 WM_MOUSEMOVE?
    • 不完全是。像这样:在函数之外声明bool isDown。并使用:case WM_LBUTTONDOWN: isDown=true; break; case WM_LBUTTONUP: isDown=false; break; case WM_MOUSEMOVE: if(isDown) draw(); break;
    • 好吧,我试试看!非常感谢您的帮助和耐心!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多