jackhkyin 2023-01-15 12:16 采纳率: 83.3%
浏览 35
已结题

c\c++如何用鼠标函数绘制圆

最近在写一个项目,有需求要操作鼠标绘圆。我用 mouse_event 和 GetCursorPos 函数实现了鼠标按下和画直线斜线。组合成矩形等图形,但圆不知道该怎么画,有会的教我,谢谢~!

这是画横线:

mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);      //鼠标右键按下
for (i = 0; i < 200; i++)                            //移动200个像素点
{
    GetCursorPos(&pos);                              //获取鼠标当前位置
    pos.x += 1;                                      //向右移动1像素点
    SetCursorPos(pos.x, pos.y);                      //设置鼠标目的位置
    Sleep(10);                                       //增加延时可看到鼠标移动轨迹,否则秒移看不到过程
}
Sleep(500);
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);         //鼠标右键弹起

这是画斜线:

mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);      //鼠标右键按下
for (i = 0; i < 200; i++)                            //移动200个像素点
{
    GetCursorPos(&pos);                              //获取鼠标当前位置
    pos.x += 1;                                      //向右移动1像素点
    pos.y += 1;                                      //向下移动1像素点
    SetCursorPos(pos.x, pos.y);                      //设置鼠标目的位置
    Sleep(10);                                       //增加延时可看到鼠标移动轨迹,否则秒移看不到过程
}
Sleep(500);
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);        //鼠标右键弹起
  • 写回答

1条回答 默认 最新

  • 流比 2023-01-15 12:58
    关注

    要用鼠标函数绘制圆,需要使用圆的数学公式,即 (x-a)^2 + (y-b)^2 = r^2。其中 (a, b) 是圆心坐标,r 是半径。

    可以在鼠标按下的地方记录下圆心坐标 (a, b),然后在鼠标移动过程中使用这个公式来计算每一个点的坐标,并使用 SetCursorPos 函数将鼠标移动到这个点上。

    示例代码如下:

    void DrawCircle(int x0, int y0, int radius)
    {
        int x = radius;
        int y = 0;
        int err = 0;
    
        while (x >= y)
        {
            SetCursorPos(x0 + x, y0 + y);
            SetCursorPos(x0 + y, y0 + x);
            SetCursorPos(x0 - y, y0 + x);
            SetCursorPos(x0 - x, y0 + y);
            SetCursorPos(x0 - x, y0 - y);
            SetCursorPos(x0 - y, y0 - x);
            SetCursorPos(x0 + y, y0 - x);
            SetCursorPos(x0 + x, y0 - y);
    
            if (err <= 0)
            {
                y += 1;
                err += 2*y + 1;
            }
            if (err > 0)
            {
                x -= 1;
                err -= 2*x + 1;
            }
        }
    }
    
    int main()
    {
        POINT pos;
        GetCursorPos(&pos);
        int x0 = pos.x;
        int y0 = pos.y;
        int radius = 50;
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        DrawCircle(x0, y0, radius);
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏

报告相同问题?

问题事件

  • 系统已结题 1月24日
  • 已采纳回答 1月16日
  • 修改了问题 1月15日
  • 修改了问题 1月15日
  • 展开全部

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程