MFC窗口通過OpenCV顯示圖片


思路非常討巧,就是將namedWindow創建的窗口的客戶區貼到MFC的圖片控件里面去,然后將剩下的窗口框架隱藏掉,代碼如下:

	cv::Mat img = cv::imread("./test.jpg");

	cv::namedWindow("test", cv::WINDOW_AUTOSIZE);

	HWND hWnd = static_cast<HWND>(cvGetWindowHandle("test"));
	if (!hWnd)
	{
		return;
	}

	HWND hParent = ::GetParent(hWnd);			// 等同於FindWindow找到的真正的對話框句柄
	if (!hParent)
	{
		return;
	}

	HWND hNewParent = GetDlgItem(IDC_PIC)->GetSafeHwnd();
	if (!hNewParent)
	{
		return;
	}

	HWND a = ::SetParent(hWnd, hNewParent);		// 將圖像顯示區域嵌入到PIC控件上,返回舊的父窗口句柄(hParent)

	cv::imshow("test", img);					// OpenCV內部持有顯示區域的句柄,亦即hWnd
	::ShowWindow(hParent, SW_HIDE);				// 隱藏對話框

特別需要注意的是cvGetWindowHandle 實際上返回的是窗口的客戶區,FindWindow才是真正的窗口句柄,Spy++證明了這一點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM