MFC 多线程获取窗口
来源:互联网 发布:java tcp协议开发 编辑:程序博客网 时间:2024/05/29 11:35
今天写多线程函数,顺便问下了下MFC下窗口的获取 ;一般的比较好写
首先我们应该知道 MFC的窗口类都有哪些 :常用的控件类 视图类 框架类等都是继承Cwnd的,
:
要找到某个CWnd对象的HWND,用GetSafeHwnd()。
在窗口类中,有句柄的成员变量,可以直接访问: m_hWnd
在窗口类外,可以用AfxGetMainWnd()->m_hWnd获得。
在MainFrame里直接用this;
其它地方用
CMainFrame* pMainFrame = (CMainFrame*)theApp.m_pMainWnd;
想得到一个控件的的句柄
GetDlgItem(ID…)->m_hWnd
得到视图的句柄
AfxGetMainWnd()->GetActiveView();
SDI:
((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();
MDI:
((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveFrame()->GetActiveView();
用全局函数GetWindow(),可获得相关窗口的句柄。
但是在编写多线程的时候,那些方法似乎不可行了,那么我们在多线程编程中怎么去取到某个窗口的句柄呢 ?
由于MFC的约束,我们一般不能直接传窗口的句柄过去,,传过去也不能用任何和m_hWnd有关的函数,因为MFC把它和线程的局部存储信息绑起来了。实际上,你不应该在另外一个线程使用GDI资源,这样会造成资源冲突,一般情况下,如果你调用,程序就崩溃
既然系统已经禁止你这么做,就应该想别的办法,而不是强求必须传过去然后使用之类的。不行就是不行
答案是我们可以直接传递对象指针进去,然后用对象的指针去获取句柄,比如在MFC中,在创建线程的时候,hThread2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFun1,this,0,&ThreadID2);this表示当前窗体的对象指针,在线程中,dlg = (CDialog1 *)pParam; 我们就可以对窗口上的控件进行操作了
http://download.csdn.net/detail/ct2008112101/7572253 相关程序代码下载地址
- MFC 多线程获取窗口
- MFC 窗口获取焦点
- MFC 窗口句柄获取
- MFC 获取父窗口
- mfc获取窗口句柄
- MFC获取窗口大小
- 通过MFC窗口获取方向键
- 窗口句柄的获取MFC
- mfc 获取视图窗口指针
- MFC获取主窗口指针
- MFC应用程序中的多线程与UI窗口
- MFC应用程序中的多线程与UI窗口
- 在MFC中获取窗口句柄
- MFC实现 获取其他应用程序窗口信息
- MFC中获取窗口句柄方法总结
- 在MFC中获取窗口句柄
- MFC 获取当前活动窗口的句柄
- 在MFC中获取窗口句柄
- Android中加入悬浮窗
- HDU 1195 Open the Lock (双向BFS)
- Head First设计模式C++实现--第五章:单件(Singleton)模式
- 创建对象(反射)
- 挖地雷
- MFC 多线程获取窗口
- iphone开源项目list
- Js作用域链及变量作用域
- 利用SetConsoleTextAttribute函数设置控制台颜色
- termios结构与控制终端接口的关系
- 电池专业版充电屏保页面增加手势后 如何使一部分区域不响应
- Linux设备模型(6)_Bus
- CUDA在VS2010下5.5设置
- Material Design Get Started