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

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

 2006-07-22 22:03:51 来源:WEB开发网   
核心提示: 让我们也添加一个对WM_COMMAND消息的处理,假设我们的窗口有一个ID为IDC_ABOUT的About菜单:class CMyWindow : public CWindowImpl<CMyWindow, CWindow, CFrameWinTraits>{public:DE

让我们也添加一个对WM_COMMAND消息的处理,假设我们的窗口有一个ID为IDC_ABOUT的About菜单:

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)
    COMMAND_ID_HANDLER(IDC_ABOUT, OnAbout)
  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;
  }
  LRESULT OnAbout(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  {
    MessageBox ( _T("Sample ATL window"), _T("About MyWindow") );
    return 0;
  }
};

需要注意得是COMMAND_HANDLER宏已经将消息的参数展开了,同样,NOTIFY_HANDLER宏也将WM_NOTIFY消息的参数展开了。

高级消息映射链和嵌入类

ATL的另一个显著不同之处就是任何一个C++类都可以响应消息,而MFC只是将消息响应任务分给了CWnd类和CCmdTarget类,外加几个有PreTranslateMessage()方法的类。ATL的这种特性允许我们编写所谓的“嵌入类”,为我们的窗口添加特性只需将该类添加到继承列表中就行了,就这么简单!

上一页  4 5 6 7 8 9 10  下一页

Tags:MFC 程序员 WTL

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