WTL 中怎么将界面重绘另做为一个对象(类)
WTL 中如何将界面重绘另做为一个对象(类)
我现在重绘了窗口的标题栏,可是代码实在太多太乱,我想将它另做为一个类,直接调用就可以了,怎么做?尤其是里面还有各种消息映射,OnNcPaint(),OnSize(),OnPaint()如此种种,这样的消息映射又如何映射到我的子类中,具体怎么做?最好给一下示例源码,本人新手,谢谢。
------解决方案--------------------
不说了,你自己去尝试。
template <class T>
class PaintImpl
{
public:
BEGIN_MSG_MAP(PaintImpl)
MESSAGE_HANDLE(WM_PAINT,OnPaint)
END_MSG_MAP()
private:
LRESULT OnPaint(UINT,WPARAM,LPARAM,BOOL&)
{
T* t = (T*) this;
CPaintDC dc(t->m_hWnd);
dc.TextOut(10,10,"Just try");
}
};
class CMainDlg: public CDialogImpl<CMainDlg>, public PaintImpl<CMainDlg>
{
public:
BEGIN_MSG_MAP(CMainDlg)
CHAIN_MSG_MAP(PaintImpl<CMainDlg>)
END_MSG_MAP()
};
ok。
我现在重绘了窗口的标题栏,可是代码实在太多太乱,我想将它另做为一个类,直接调用就可以了,怎么做?尤其是里面还有各种消息映射,OnNcPaint(),OnSize(),OnPaint()如此种种,这样的消息映射又如何映射到我的子类中,具体怎么做?最好给一下示例源码,本人新手,谢谢。
界面
对象
类
重绘
WTL
------解决方案--------------------
不说了,你自己去尝试。
template <class T>
class PaintImpl
{
public:
BEGIN_MSG_MAP(PaintImpl)
MESSAGE_HANDLE(WM_PAINT,OnPaint)
END_MSG_MAP()
private:
LRESULT OnPaint(UINT,WPARAM,LPARAM,BOOL&)
{
T* t = (T*) this;
CPaintDC dc(t->m_hWnd);
dc.TextOut(10,10,"Just try");
}
};
class CMainDlg: public CDialogImpl<CMainDlg>, public PaintImpl<CMainDlg>
{
public:
BEGIN_MSG_MAP(CMainDlg)
CHAIN_MSG_MAP(PaintImpl<CMainDlg>)
END_MSG_MAP()
};
ok。