《Windows 程序设计(第3版)》——第6章 框架中的窗口 6.1 CWnd类的引出

简介: 在类的体系结构中,框架程序提供了CWnd类来封装窗口的HWND句柄,即使用CWnd类来管理窗口的对象,这包括窗口的创建和销毁、窗口的一般行为和窗口所接受的消息。

本节书摘来自异步社区《Windows 程序设计(第3版)》一书中的第6章,第6.1节,作者:王艳平 , 张铮著,更多章节内容可以访问云栖社区“异步社区”公众号查看

第6章 框架中的窗口

前面讲述了类库框架管理应用程序的基本方式,以及它的执行顺序。本章将继续介绍如何在框架程序执行的过程中创建窗口和响应线程内发送给窗口的消息。

消息处理是Win32应用程序的灵魂,也是本章重点讨论的话题。本章最终要设计一个能够实现消息映射的基本构架。

6.1 CWnd类的引出

在类的体系结构中,框架程序提供了CWnd类来封装窗口的HWND句柄,即使用CWnd类来管理窗口的对象,这包括窗口的创建和销毁、窗口的一般行为和窗口所接受的消息。

为了使其他的类也有处理消息的机会,我们可以再封装一个类CCmdTarget作为消息处理的终点,也就是说所有从这个类派生的类都可以具有处理消息的能力。它和CWnd类都在_AFXWIN.H文件中,应该在定义CWinThread类之前定义它们。下面是这两个类的最基本成员。

class CCmdTarget : public CObject      // 这个类的实现代码在CMDTARG.CPP文件中
{                      // 请创建此文件,并添加上这样的代码:
  DECLARE_DYNCREATE(CCmdTarget);     // IMPLEMENT_DYNCREATE(CCmdTarget, CObject)
public:                  // CCmdTarget::CCmdTarget()  {   }
  CCmdTarget();
};

class CWnd : public CCmdTarget 
{
  DECLARE_DYNCREATE(CWnd)
public:  
  CWnd();
  virtual ~CWnd();

  HWND m_hWnd;
  operator HWND() const { return m_hWnd; }
  HWND GetSafeHwnd() { return this == NULL ? NULL : m_hWnd; }
};

CWnd类的实现代码在WINCORE.CPP文件中,如下所示。

#include "_afxwin.h"
#include "winhand_.h"

CWnd::CWnd()
{
  m_hWnd = NULL;
}
CWnd::~CWnd()
{
  if(m_hWnd != NULL)
  {
    ::DestroyWindow(m_hWnd);
  }
}
IMPLEMENT_DYNCREATE(CWnd, CCmdTarget)

CWnd类是类库的核心,上面是它的基本框架。以后我们就在这个框架的基础上添加代码,最终实现一个便于用户使用,而又不失灵活性的窗口类。

相关文章
|
1月前
|
消息中间件 编译器 API
Windows窗口程序
Windows窗口程序
|
12天前
|
Windows
windows系统vbs脚本 恶搞关不掉的窗口 以及解决办法
windows系统vbs脚本 恶搞关不掉的窗口 以及解决办法
|
1月前
|
API Python Windows
python3应用windows api对后台程序窗口及桌面截图并保存的方法
python3应用windows api对后台程序窗口及桌面截图并保存的方法
148 1
|
1月前
|
Windows
(查看,和保存)windows下通过cmd命令符窗口查看、保存文件目录结构
(查看,和保存)windows下通过cmd命令符窗口查看、保存文件目录结构
99 0
|
9月前
|
存储 固态存储 Windows
在 Windows 中,当一个应用程序窗口被关闭,该应用程序将会保留在哪里?
在 Windows 中,当一个应用程序窗口被关闭,该应用程序将会保留在哪里?
100 0
|
10月前
|
API C++ Windows
Windows入门篇一之MSDN手册的使用和第一个窗口程序
Windows入门篇一之MSDN手册的使用和第一个窗口程序
Windows入门篇一之MSDN手册的使用和第一个窗口程序
|
10月前
|
Windows
Windows DOS窗口查看历史执行过的命令的三种方式
Windows DOS窗口查看历史执行过的命令的三种方式
|
Windows
windows程序设计 笔记1
 windows.h 中包含了 许多其他的头文件   主要是 WINUSER.H     使用者界面               WINBASE.H      kernel函数                WINDEF.
586 0
|
Windows 消息中间件
Windows 程序设计3、4章笔记
  #include "windows.h" #include "stdio.h" #include "stdlib.h"  #include "resource.h"     //预编译我们的资源文件 #include "tchar.
782 0
|
Windows 消息中间件 图形学
windows程序设计 第五章笔记 GDI(1)
    我们在对 windows 设备进行绘图操作的时候要用到  GDI  函数    并且要获取 设备的 DC 也就是设备的代号      如果是响应WM_PAINT 消息 那么 我们利用      BeginPaint       .
1042 0

热门文章

最新文章