c++鼠标拖动

#include<windows.h> 

inline void chilkDrag(int m_x, int m_pos_y,int drag_y) {//移动鼠标位置,拖动距离
	::SetCursorPos(m_x, m_pos_y);//移动鼠标位置
	Sleep(50);
	mouse_event(MOUSEEVENTF_LEFTDOWN , 0, 0, 0, 0);//左键点击抬起| MOUSEEVENTF_LEFTUP
	//鼠标移动,水平方向0位移,垂直方向drag_y距离
    mouse_event(MOUSEEVENTF_MOVE, 0, drag_y, 0, 0);
	mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个简单的 OpenCV C++ 示例程序,可以利用鼠标拖动任意画多个圆并显示: ```cpp #include <opencv2/opencv.hpp> using namespace cv; // 定义全局变量 bool drawing = false; // 是否正在画圆 Point center; // 圆心坐标 int radius = 0; // 圆半径 // 鼠标事件回调函数 void mouse_callback(int event, int x, int y, int flags, void* userdata) { // 鼠标左键按下事件 if (event == EVENT_LBUTTONDOWN) { drawing = true; center = Point(x, y); } // 鼠标移动事件 else if (event == EVENT_MOUSEMOVE && drawing) { radius = cvRound(norm(center - Point(x, y))); } // 鼠标左键释放事件 else if (event == EVENT_LBUTTONUP) { drawing = false; // 画圆 circle(*(Mat*)userdata, center, radius, Scalar(0, 255, 0), 2); } } int main() { // 创建画布 Mat image = Mat::zeros(800, 800, CV_8UC3); // 创建窗口 namedWindow("Draw Circles"); // 设置鼠标事件回调函数 setMouseCallback("Draw Circles", mouse_callback, &image); // 循环显示画布 while (1) { imshow("Draw Circles", image); if (waitKey(10) == 27) break; } return 0; } ``` 运行程序后,可以在窗口中使用鼠标拖动画圆,并在画布上显示出来。按下 ESC 键可退出程序。 ### 回答2: 要实现在OpenCV C中鼠标拖动任意画多个圆并显示的功能,可以按照以下步骤: 1. 导入所需的头文件和库: #include <opencv2/opencv.hpp> 2. 定义全局变量: cv::Mat image; // 存储绘制的图像 std::vector<cv::Point> circles; // 存储圆心位置的向量 3. 定义回调函数,处理鼠标事件: void onMouse(int event, int x, int y, int flags, void* userdata) { if (event == cv::EVENT_LBUTTONDOWN) { // 鼠标左键按下 circles.push_back(cv::Point(x, y)); // 将圆心位置添加到向量中 cv::circle(image, cv::Point(x, y), 10, cv::Scalar(0, 255, 0), 2); // 绘制圆 cv::imshow("Drawing", image); // 显示图像 } } 4. 主函数中进行初始化和处理: int main() { image = cv::Mat::zeros(500, 500, CV_8UC3); // 创建一个黑色图像 cv::namedWindow("Drawing"); // 创建一个窗口用于显示图像 cv::setMouseCallback("Drawing", onMouse); // 设置鼠标回调函数 while (true) { int key = cv::waitKey(10); if (key == 27) { // 当按下ESC键时退出循环 break; } } cv::destroyWindow("Drawing"); // 销毁窗口 return 0; } 在主函数中,我们首先创建一个黑色图像,然后创建一个窗口用于显示。接着,我们设置鼠标回调函数为上面定义的`onMouse`函数。循环中,我们使用`cv::waitKey(10)`监听键盘事件,当按下ESC键时退出循环,并销毁窗口。 当鼠标左键按下时,回调函数会将圆心位置添加到向量中,并在图像上绘制相应的圆。然后调用`cv::imshow`函数显示图像。 通过这样的步骤,我们可以在OpenCV C中实现鼠标拖动任意画多个圆并显示的功能。 ### 回答3: 使用OpenCV库和C语言编程,可以实现通过鼠标拖动画多个圆并显示的功能。 首先,我们需要在代码中引入OpenCV的相关头文件,并创建一个用于显示圆的窗口。 接下来,我们定义一个鼠标事件回调函数,用于捕捉鼠标的点击和移动事件。在函数中,我们可以监听鼠标左键的按下、移动和松开事件,并根据事件类型来相应地进行处理。 当鼠标左键按下时,我们可以记录下当前的鼠标位置,并设置一个标志位来表示正在绘制圆的状态。 接着,在鼠标移动事件中,我们可以获取当前鼠标的位置,并根据标志位来判断是否正在绘制圆。如果正在绘制圆,则根据鼠标的位置计算出圆心和半径,并使用OpenCV提供的函数来绘制一个圆。 最后,当鼠标左键松开时,我们可以重置标志位,表示画圆操作结束。 在主函数中,我们可以创建一个无穷循环,用于持续监听鼠标事件。然后,我们调用OpenCV的函数,将鼠标事件和回调函数进行绑定,并显示窗口。 通过以上步骤,我们就可以在OpenCV中实现鼠标拖动任意画多个圆并显示的功能了。 注意:以上只是一个大致的步骤和思路,具体的代码实现细节需要根据OpenCV的版本和具体需求进行调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值