窗口类、窗口类对象与窗口
来源:互联网 发布:磁悬浮列车 知乎 编辑:程序博客网 时间:2024/05/01 00:50
我们可以发现,SDK程序中多了一个HWND类型的变量hwnd。该变量用来保存由CreateWindowEx函数创建的窗口句柄,并将其作为参数传递给随后的显示窗口操作(ShowWindow函数)和更新窗口操作(UpdateWindow函数)。而我们自定义的实现代码中,CWnd类定义了一个HWND类型的成员变量:m_hWnd,用于保存这个窗口句柄。首先CWnd类的CreateEx函数创建窗口,并将该窗口句柄保存到这个成员变量,接着调用CWnd类的ShowWindow函数显示窗口时,就不需要再传递这个句柄了,因为它已经是成员变量,该函数可以直接使用它。CWnd类的UpdateWindow函数也是一样的道理。
许多程序员在进行MFC程序开发时,容易混淆一点:认为这里的CWnd类型的wnd这个C++对象所代表的就是一个窗口。因为在实践中,他们看到的现象是:当C++窗口类对象销毁时,相应的窗口也就没了。有时正好巧合,当窗口销毁时,C++窗口类对象的生命周期也到了,从而也销毁了。正因为如此,许多程序员感觉C++窗口类对象就是窗口,窗口就是这个C++窗口类对象。事实并非如此。读者可以想像一下,如果我们关闭了一个窗口,这个窗口就销毁了,那么该窗口对应的C++窗口类对象销毁了没有呢?当然没有。当一个窗口销毁时,它会调用CWnd类的DestroyWindow函数,该函数销毁窗口后,将CWnd成员变量:m_hWnd设为NULL。
C++窗口类对象的生命周期和窗口的生命周期不是一致的。当一个窗口销毁时,与C++窗口类对象没有关系,它们之间的纽带仅仅在于这个C++窗口类内部的成员变量:m_hWnd,该变量保存了与这个C++窗口类对象相关的那个窗口的句柄。
另一方面,当我们设计的这个C++窗口类对象销毁的时候,与之相关的窗口是应该销毁的,因为它们之间的纽带(m_hWnd)已经断了。另外,窗口也是一种资源,它也占据内存。这样,在C++窗口类对象析构时,也需要回收相关的窗口资源,即销毁这个窗口。
因此,读者一定要注意:
C++窗口类对象与窗口并不是一回事,它们之间惟一的关系是C++窗口类对象内部定义了一个窗口句柄变量,保存了与这个C++窗口类对象相关的那个窗口的句柄。窗口销毁时,与之对应的C++窗口类对象销毁与否,要看其生命周期是否结束。但C++窗口类对象销毁时,与之相关的窗口也将销毁。
- 窗口类、窗口类对象与窗口
- 窗口类,窗口类对象与窗口
- 窗口类和窗口对象
- 窗口类、窗口类对象与窗口三者之间关系
- 窗口类、窗口类对象与窗口 三者之间关系
- 窗口类、窗口类对象与窗口 三者之间关系
- 窗口类、窗口类对象与窗口 三者之间关系
- 窗口风格 与 窗口类风格
- 窗口类指针与窗口句柄
- 窗口类
- 窗口类
- 窗口类
- C++对象与窗口对象
- 窗口风格/ 窗口类风格
- 窗口与窗口类对象不是一回事,MFC 消息映射机制
- 窗口句柄、窗口类对象以及窗…
- 窗口
- 窗口
- INT 41 HARD DISK 0 PARAMETER TABLE ADDRESS
- 'JPEG error #52' 错误,解决办法
- 转:用友华表Cell报表面面观
- 关于Muster 5.5.7的奇怪问题
- 计算机专业,想搞嵌入式开发,从哪里入手?
- 窗口类、窗口类对象与窗口
- msdtc问题 IIS 错误
- oracle 下 创建数据库和用户界面操作 和sql 语句 下的创建方法
- moss文档访问浏览次数统计
- 配置与管理Windows Server 2008中的FSRM
- 配置文件读取
- 代码:制作分割线
- VS2005无法启动问题(只停留在启动画面)
- Embeded linux OS Reading Notes