opencv绑定MFC显示图片,MFC的鼠标响应在opencv图片上失效

opencv通过如下方式显示图片到MFC控件上

// TODO: 在此添加额外的初始化代码
CWnd *pWnd1 = GetDlgItem(IDC_abc);//CWnd是MFC窗口类的基类,提供了微软基础类库中所有窗口类的基本功能。
pWnd1->GetClientRect(&rect1);//GetClientRect为获得控件相自身的坐标大小
namedWindow("view", WINDOW_AUTOSIZE);//设置窗口名
HWND hWndl = (HWND)cvGetWindowHandle("view");//hWnd 表示窗口句柄,获取窗口句柄
HWND hParent1 = ::GetParent(hWndl);//GetParent函数一个指定子窗口的父窗口句柄
::SetParent(hWndl, GetDlgItem(IDC_abc)->m_hWnd);
::ShowWindow(hParent1, SW_HIDE);//ShowWindow指定窗口中显示

可以正常显示,但是对于鼠标时间的相应以及快捷键的相应会出现问题。

网上给出的解决方案 基本与该方案雷同

原文作者:aircraft

出了很多冲突异常事件导致鼠标操作没有响应

当opencv窗口与mfc控件绑定时,可以认为opencv绑定区域覆盖在mfc 控件上,此时mfc本身的鼠标响应在此区域失效,只能调用opencv的鼠标响应事件。

而当你调用opencv的鼠标滚轮事件时候又会没有反应,此时是因为mfc的鼠标滚轮事件优先级别更好 ,只能在这里用mfc的鼠标滚轮响应事件。

不想出现上面的问题,解决办法有:

1:直接使用Mfc的图像处理类不用opencv

2:或者使用opencv显示时不将窗口绑定到mfc控件上,而是转换图像类格式写入

3:或者就像我上面说的,使用opencv的鼠标点击事件,使用Mfc的鼠标滚轮事件

但是我觉得修改opencv源码也可以实现。

经过尝试,始终无法屏蔽opencv的事件,退回方法3!

有想法大家评论区讨论。

追更一下,注册opencv的事件无响应,放弃了用opencv

猜你喜欢

转载自blog.csdn.net/u012422524/article/details/129150017
今日推荐