工作线程的全局函数中如何控制picture control进行图像显示
2015-06-19 11:23
197 查看
我们知道在对话框类class Ctldmfc1Dlg : public CDialogEx获取控件的
但是如果在工作线程的全局函数中,不存在CWnd::GetDlgItem()函数,如果定义CWnd 类的对象调用的时候,代码如下:
则会出现如下问题:
但是用如下代码实现的时候,则是没有问题的
对于①m_hWnd这个成员变量,最早是定义在类CWnd中,而且是类CWnd的第一个数据成员它是窗口类的一个句柄,凡是从CWnd派生的类都有这个句柄,凡是以CWnd派生的类定义的对象内部也都有这个句柄,它是类或者对象标识自己的句柄。凡是窗口都有一个句柄用来标识自己,在CWnd类中将这个句柄作为一个成员变量直接封装了,所以CWnd类的成员函数都没有句柄这个参数了,比如::ShowWindow(HWND hWnd),在CWnd类或者派生类中,这个函数就没有参数了,CWnd::ShowWindow(),其实这个函数实现很简单,就是调用了::ShowWindow(HWND hWnd),因为在类里已经封装好了,所以也不需要在传递参数了。
获得窗口类的句柄方法如下:
1、this->m_hWnd;
2、GetSafeHwnd();
3、AfxGetMainWnd()->m_hWnd;
CDC *pDC=GetDlgItem(ID)->GetDC();//CWnd::GetDlgItem()返回ID标示的控件或者子窗口的指针,然后h获取CDC类的指针,图形指针, HDC hDC=pDC->GetSafeHdc();//获取pDC指向的设备的句柄 CRect rect; GetDlgItem(ID)->GetClientRect(&rect);//获取客户区的坐标,并且保存在rect里 CvvImage cimg; cimg.CopyOf(image); cimg.DrawToHDC(hDC,&rect); ReleaseDC(pDC);//释放指针
但是如果在工作线程的全局函数中,不存在CWnd::GetDlgItem()函数,如果定义CWnd 类的对象调用的时候,代码如下:
CWnd Cwnd; CDC* pDC; pDC= Cwnd.GetDlgItem(IDC_STATIC_PIC)->GetDC(); HDC hDC=pDC->GetSafeHdc(); CRect rect; Cwnd.GetDlgItem(IDC_STATIC_PIC)->GetClientRect(&rect);
则会出现如下问题:
ASSERT(::IsWindow(m_hWnd));
但是用如下代码实现的时候,则是没有问题的
CWnd *pWnd = AfxGetMainWnd();//AfxGetMainWnd如果被主线程调用则获取MFC主窗口指针,如果被应用程序的次线程调用,该函数返回与引起该调用线程连接的主窗口。 HWND hHwnd = pWnd->m_hWnd;//获取CWnd类数据成员,是类型 HWND的公共变量① HWND Hwnd = ::GetDlgItem(hHwnd,IDC_STATIC_PIC); HDC hDC=::GetDC(Hwnd); CRect rect; pWnd->GetDlgItem(IDC_STATIC_PIC)->GetClientRect(&rect); CDC *pDC; pDC=pWnd->GetDC(); CvvImage cimg; cimg.CopyOf(&(IplImage)frame); cimg.DrawToHDC(hDC,&rect); pWnd->ReleaseDC(pDC);
对于①m_hWnd这个成员变量,最早是定义在类CWnd中,而且是类CWnd的第一个数据成员它是窗口类的一个句柄,凡是从CWnd派生的类都有这个句柄,凡是以CWnd派生的类定义的对象内部也都有这个句柄,它是类或者对象标识自己的句柄。凡是窗口都有一个句柄用来标识自己,在CWnd类中将这个句柄作为一个成员变量直接封装了,所以CWnd类的成员函数都没有句柄这个参数了,比如::ShowWindow(HWND hWnd),在CWnd类或者派生类中,这个函数就没有参数了,CWnd::ShowWindow(),其实这个函数实现很简单,就是调用了::ShowWindow(HWND hWnd),因为在类里已经封装好了,所以也不需要在传递参数了。
获得窗口类的句柄方法如下:
1、this->m_hWnd;
2、GetSafeHwnd();
3、AfxGetMainWnd()->m_hWnd;
相关文章推荐
- 运算符 - PHP手册笔记
- iphone内容开发技术学习
- JVM报错提示
- 自定义高级QFileDialog文件过滤器
- 取消软键盘自动弹出
- Leetcode37: Implement strStr()
- eclipse+php+wamp配置
- Eclipse中SVN切换用户名
- Codeforces Round #308 (Div. 2) D. Vanya and Triangles 水题
- eclipse 操作笔记
- SAFe 从概念到实践 开发人员的“敏捷”之我见
- 解决编译Gh0st时error C2065: 'IDC_HAND' : undeclared identifier
- 算法导论--贪心算法与动态规划(活动选择问题)
- 第三阶段绩效考核
- SVN 目录结构
- java知识点二-TCP和UDP的联系和用途
- linux 配置放火墙端口
- 剖析开源监控Nagios故障
- ssh框架分工与职责
- String format specifier