在MFC窗体中建立一个Picture Control控件,用于显示opencv窗口

在属性中设置图片控件的资源ID为IDC_PIC1

主要的思路:
使用GetWindowRect可以获取图片控件的区域
使用cv::resizeWindow可以设置opencv窗口的大小,适合图片控件的大小
使用cvGetWindowHandle函数可以获取到opencv窗口的句柄
使用::SetParent将opencv父窗口设置为图片控件,实现嵌入到MFC控件里
显示opencv窗口的代码
void CMFCCCCDlg::OnBnClickedButton1()
{
cv::destroyWindow("a");//销毁名为a的的窗口,避免受到影响
cv::Mat src = cv::imread("D:\\z.jpg");//载入图片
CRect rect;
GetDlgItem(IDC_PIC1)->GetWindowRect(rect); //获取picture control控件变量的rect
cv::namedWindow("a", CV_WINDOW_NORMAL);//创建一个名为a的opencv窗口
cv::resizeWindow("a", rect.Width(), rect.Height());//根据picture control的大下设置opencv窗口的大小
cv::imshow("a", src);//显示图片在名为a的opencv窗口
HWND hWnd = (HWND)cvGetWindowHandle("a");//获取opencv窗口句柄
HWND hParent = ::GetParent(hWnd);//获取原本的opencv父窗口
::SetParent(hWnd, GetDlgItem(IDC_PIC1)->m_hWnd);//将OpenCV窗口的父窗口设置为控件ID为IDC_PIC1的窗口,即OpenCV窗口成为IDC_PIC1的子窗口,嵌套在IDC_PIC1控件中。
::ShowWindow(hParent, SW_HIDE);//隐藏原本的父窗口,使得OpenCV窗口只显示在IDC_PIC1控件中。
}

