WEB开发网
开发学院软件开发VC MFC程序员的WTL指南(5)对话框与控件 阅读

MFC程序员的WTL指南(5)对话框与控件

 2006-07-22 22:03:31 来源:WEB开发网   
核心提示: 钩住一个CContainedWindow对象需要做四件事:在对话框中创建一个CContainedWindowT 成员变量, 将消息处理添加到对话框消息映射的ALT_MSG_MAP小节,MFC程序员的WTL指南(5)对话框与控件(5), 在对话框的构造函数中调用CContainedWindo

钩住一个CContainedWindow对象需要做四件事:

  1. 在对话框中创建一个CContainedWindowT 成员变量。
  2. 将消息处理添加到对话框消息映射的ALT_MSG_MAP小节。
  3. 在对话框的构造函数中调用CContainedWindowT 构造函数并告诉它哪个ALT_MSG_MAP小节的消息需要处理。
  4. 在OnInitDialog()中调用CContainedWindowT::SubclassWindow() 方法与控件建立关联。

在ControlMania1中,我对三个按钮分别使用了一个CContainedWindow,对话框处理发送到每一个按钮的WM_SETCURSOR消息,并改变鼠标指针形状。

现在仔细看看这一步,首先,我们在CMainDlg中添加了CContainedWindow成员。

class CMainDlg : public CDialogImpl<CMainDlg>
{
// ...
protected:
  CContainedWindow m_wndOKBtn, m_wndExitBtn;
};

其次,我们添加了ALT_MSG_MAP小节,OK按钮使用1小节,Exit按钮使用2小节。这意味着所有发送给OK按钮的消息将由ALT_MSG_MAP(1)小节处理,所有发给Exit按钮的消息将由ALT_MSG_MAP(2)小节处理。

class CMainDlg : public CDialogImpl<CMainDlg>
{
public:
  BEGIN_MSG_MAP_EX(CMainDlg)
    MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
    COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
    COMMAND_ID_HANDLER(IDOK, OnOK)
    COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
  ALT_MSG_MAP(1)
    MSG_WM_SETCURSOR(OnSetCursor_OK)
  ALT_MSG_MAP(2)
    MSG_WM_SETCURSOR(OnSetCursor_Exit)
  END_MSG_MAP()
  LRESULT OnSetCursor_OK(HWND hwndCtrl, UINT uHitTest, UINT uMouseMsg);
  LRESULT OnSetCursor_Exit(HWND hwndCtrl, UINT uHitTest, UINT uMouseMsg);
};

接着,我们调用每个CContainedWindow的构造函数,告诉它使用ALT_MSG_MAP的哪个小节。

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

Tags:MFC 程序员 WTL

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