gpt4 book ai didi

c++ - cvSetMouseCallback - 事件来自哪个窗口?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:05 25 4
gpt4 key购买 nike

我使用 imshow 创建了许多窗口,并且我正在使用 cvSetMouseCallback 函数来获取鼠标位置和当前按下的按钮。

但我无法理解事件来自哪个窗口?我怎么知道哪个窗口生成什么事件?

最佳答案

您可以在cvSetMouseCallback 函数上使用param 参数将用户定义的参数传递给您的鼠标回调。然后,在您的回调中,您可以读取该参数以确定鼠标事件来自哪个窗口。

这里是 cvSetMouseCallback 的定义功能:

void cvSetMouseCallback(const char* window_name, CvMouseCallback on_mouse, void* param=NULL )

您可以使用第三个参数将指针传递给您喜欢的任何内容(例如,窗口的名称)。这是一个例子:

#include "opencv/cv.h"
#include "opencv/highgui.h"

using namespace std;
using namespace cv;

void on_mouse(int event, int x, int y, int flags, void* param)
{
if (event == EVENT_LBUTTONDOWN)
{
const char* winname = (const char*)param;
cout << "Mouse button down on window " << winname << endl;
}
}

int _tmain(int argc, _TCHAR* argv[])
{
cvNamedWindow("win1");
cvNamedWindow("win2");
cvSetMouseCallback("win1", on_mouse, "win1");
cvSetMouseCallback("win2", on_mouse, "win2");
cvWaitKey(0);
return 0;
}

当您单击两个窗口中的任何一个时,此应用程序将在控制台中写入窗口名称。这是它的样子:

Sample output

关于c++ - cvSetMouseCallback - 事件来自哪个窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22923211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com