说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

请教一些关于HWND和CWnd及其它一些常遇到的问题。

编辑:说三道四文库 发布时间:2018-06-23 06:21
HTML文档下载 WORD文档下载 PDF文档下载
1、HWND和CWnd的不同,及如何获取和如何使用及使用时需注意些什么?
2、并对AfxGetApp()和m_hWnd及m_hWndOwner的使用注意事项?
3、在对话框和多文档中诸如此类的问题。

希望大家能给予帮助,谢谢大家!
HWND时窗口句柄,CWnd时窗口类,该类中有对应窗口的HWND
1.概念不同。CWnd是C++中的类,是C++特有的东西,而HWND和WNDCLASS都是操作系统中的数据结构,俗称窗口类,但它不是类,只是一个结构。Windows是用C写的。
2.生命期不同,CWnd类在脱离作用域后会被自动析构,而WNDCLASS和HWND是存在于进程始末的。
CWnd并不是直接把整个WNDCLASS都包装在内,而仅仅是包装了一个指向窗口的句柄,就是说,使用CWnd的指针,最后还是要转化成句柄对窗口进行操作。
                    CWnd
CWnd* pWnd-----> ----------
                 | m_hWnd |------>WNDCLASS
                 |  ……  |
                 |其他成员|
                 ----------
理解了上面你就能理解,为什么创建一个窗口(典型如工具条,状态栏)要经过两次操作,一次是建立C++对象CToolBar,此时CToolBar内的窗口句柄还是空,即不代表任何Window对象,第二次使用Create/CreateEx函数才是真正创建Windows对象,创建完了之后,CToolBar内的窗口句柄就有效了。
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘