《Windows 程序设计(第3版)》——第6章 框架中的窗口 6.1 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类是类库的核心,上面是它的基本框架。以后我们就在这个框架的基础上添加代码,最终实现一个便于用户使用,而又不失灵活性的窗口类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值