WEB开发网
开发学院软件开发VC MFC程序员WTL指南(2)ATL界面类 阅读

MFC程序员WTL指南(2)ATL界面类

 2008-01-19 20:26:41 来源:WEB开发网   
核心提示:让我们开始定义一个新类,在后面的章节我会逐步的完成这个类的定义,MFC程序员WTL指南(2)ATL界面类(4),class CMyWindow : public CWindowImpl<CMyWindow>{public: DECLARE_WND_CLASS(_T("My Window Class

让我们开始定义一个新类,在后面的章节我会逐步的完成这个类的定义。

class CMyWindow : public CWindowImpl<CMyWindow>
{
public:
   DECLARE_WND_CLASS(_T("My Window Class"))
};

接下来是消息映射链,ATL的消息映射链比MFC的简单的多,ATL的消息映射链被展开为switch语句,switch语句正确的消息处理者并调用相应的函数。使用消息映射链的宏是BEGIN_MSG_MAP 和 END_MSG_MAP,让我们为我们的窗口添加一个空的消息映射链。

class CMyWindow : public CWindowImpl<CMyWindow>
{
public:
   DECLARE_WND_CLASS(_T("My Window Class"))
   BEGIN_MSG_MAP(CMyWindow)
   END_MSG_MAP()
};

我将在下一节展开讲如何如何添加消息处理到消息映射链。最后,我们需要为我们的窗口类定义窗口的特征,窗口的特征就是窗口类型和扩展窗口类型的联合体,用于创建窗口时指定窗口的类型。窗口类型被指定为参数模板,所以窗口的调用者不需要为指定窗口的正确类型而烦心,下面是是同ATL类CWinTraits定义窗口类型的例子:

typedef CWinTraits<WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,WS_EX_APPWINDOW> CMyWindowTraits;
class CMyWindow : public CWindowImpl<CMyWindow, CWindow, CMyWindowTraits>
{
public:
   DECLARE_WND_CLASS(_T("My Window Class"))
   BEGIN_MSG_MAP(CMyWindow)
   END_MSG_MAP()
};

调用者可以重载CMyWindowTraits的类型定义,但是一般情况下这是没有必要的,ATL提供了几个预先定义的特殊的类型,其中之一就是CFrameWinTraits,一个非常棒的框架窗口:

typedef CWinTraits<WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
                     WS_EX_APPWINDOW | WS_EX_WINDOWEDGE> CFrameWinTraits;
填写消息映射链

ATL的消息映射链是对开发者不太友好的部分,也是WTL对其改进最大的部分。类向导至少可以让你添加消息响应,然而ATL没有消息相关的宏和象MFC那样的参数自动展开功能,在ATL中只有三种类型的消息处理,一个是WM_NOTIFY,一个是WM_COMMAND,第三类是其他窗口消息,让我们开始为我们的窗口添加WM_CLOSE 和 WM_DESTROY的消息相应函数。

class CMyWindow : public CWindowImpl<CMyWindow, CWindow, CFrameWinTraits>
{
public:
   DECLARE_WND_CLASS(_T("My Window Class"))
   BEGIN_MSG_MAP(CMyWindow)
     MESSAGE_HANDLER(WM_CLOSE, OnClose)
     MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
   END_MSG_MAP()
   LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
     DestroyWindow();
     return 0;
   }
   LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
     PostQuitMessage(0);
     return 0;
   }
};

上一页  1 2 3 4 5 6 7 8  下一页

Tags:MFC 程序员 WTL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接