将主消息映射(BEGIN_MSG_MAP_EX)拆分为两个文件

时间:2014-09-16 15:05:03

标签: winapi atl wtl

我正在尝试使用WTL,我想将一个大型消息映射分成两个或更多文件。例如,我想将托盘图标逻辑移动到单独的文件中。我知道CHAIN_MSG_MAPCHAIN_MSG_MAP_MEMBER,但在这种情况下我应该使用什么?

另外,我如何能够从第二堂课访问窗口句柄?

1 个答案:

答案 0 :(得分:0)

你可能正在寻找这样的东西(没有经过测试;我的WTL相当生疏;需要注意事项)。

class TrayIconHandler : public CWindow, public CMessageMap {
public:  
  BEGIN_MSG_MAP(TrayIconHandler)
  // Message handlers to taste
  END_MSG_MAP()
};

class MainWindow : public CWindowImpl<MainWindow> {
public:
  BEGIN_MSG_MAP(MainWindow)
    MESSAGE_HANDLER(WM_CREATE, OnCreate)
    // Other message handlers
    CHAIN_MSG_MAP_MEMBER(tray_icon_)
  END_MSG_MAP()

  LRESULT OnCreate(UINT, WPARAM, LPARAM, BOOL&) {
    tray_icon_.m_hWnd = m_hWnd;
  }
private:
  TrayIconHandler tray_icon_;
};

当然,这两个类可能位于不同的源文件和/或标题中。