MFC程序员的WTL指南(5)对话框与控件
2006-07-22 22:03:31 来源:WEB开发网核心提示: CContainedWindowT<CButton> m_wndOKBtn;这样就可以使用CButton类的方法,当你把鼠标光标移到这些按钮上就可以看到WM_SETCURSOR消息处理函数的作用结果:ATL 方式 3 - 子类化(Subclassing)第三种方法创建一个CWi
CContainedWindowT<CButton> m_wndOKBtn;
这样就可以使用CButton类的方法。
当你把鼠标光标移到这些按钮上就可以看到WM_SETCURSOR消息处理函数的作用结果:
ATL 方式 3 - 子类化(Subclassing)
第三种方法创建一个CWindowImpl派生类并用它子类化一个控件。这和第二种方法有些相似,只是消息处理放在CWindowImpl类内部而不是对话框类中。
ControlMania1使用这种方法子类化主对话框的About按钮。下面是CButtonImpl类,他从CWindowImpl类派生,处理WM_SETCURSOR消息:
class CButtonImpl : public CWindowImpl<CButtonImpl, CButton>
{
BEGIN_MSG_MAP_EX(CButtonImpl)
MSG_WM_SETCURSOR(OnSetCursor)
END_MSG_MAP()
LRESULT OnSetCursor(HWND hwndCtrl, UINT uHitTest, UINT uMouseMsg)
{
static HCURSOR hcur = LoadCursor ( NULL, IDC_SIZEALL );
if ( NULL != hcur )
{
SetCursor ( hcur );
return TRUE;
}
else
{
SetMsgHandled(false);
return FALSE;
}
}
};
接着在主对话框声明一个CButtonImpl成员变量:
class CMainDlg : public CDialogImpl<CMainDlg>
{
// ...
protected:
CContainedWindow m_wndOKBtn, m_wndExitBtn;
CButtonImpl m_wndAboutBtn;
};
最后,在OnInitDialog()种子类化About按钮。
更多精彩
赞助商链接