100分请教一个关于VC继承的基础问题
我有个基类CBaseDialog继承自 CDialog
重写了 OnInitDialog
还添加了OnLButtonDown和OnLButtonUp事件
然后我新建个对话框类CTab1Dialog,继承自CBaseDialog
在OnInitDialog的代码都可以执行,
如果我想要OnLButtonDown和OnLButtonUp事件的代码也继承下来,该怎么做啊
谢谢
[解决办法]
有两种选择
1. 不要在新的CTab1Dialog中重写 OnLButtonDown和OnLButtonUp, 默认就能保有基类的两个方法。
2. 在CTab1Dialog中重写 OnLButtonDown和OnLButtonUp, 在两个函数的方法体内回调基类的这两个函数。
如下 void OnLButtonDown()
{
CBaseDialog::OnLButtonDown();
}
[解决办法]
1楼正解。但要注意OnLButtonDown要是public或者protected
[解决办法]
正解。
[解决办法]
消息处理过程不存在继承一说,需要自己将要处理的消息加到消息路由表中。
[解决办法]
继承的窗口要自己添加消息映射,基类的没法传给你
[解决办法]
消息处理过程不存在继承一说,需要自己将要处理的消息加到消息路由表中。
[解决办法]
消息处理过程不存在继承一说,需要自己将要处理的消息加到消息路由表中。
也就是说,如果我想在继承窗口类中处理消息,就必须重新做消息映射处理,
而在基类中的消息映射是不起作用的,对吗?
继承的窗口要自己添加消息映射,基类的没法传给你
唉,看来想偷懒少写几行代码是不行了,
不知道大大们有没有类似的经验,就是做一个模版对话框类,把背景图,字体,事件等一些基本功能实现,然后其他对话框类都继承这个,再做其他处理。
http://www.codeproject.com/Articles/18967/Bitmap-Backgrounds-For-Dialog-Boxes
参考别人怎么做的
[解决办法]
本帖最后由 VisualEleven 于 2013-08-15 11:31:22 编辑 我有个“Tab内是Dlg.rar”
http://download.csdn.net/detail/schlafenhamster/4478966
使用到:
class CBaseDialog : public CDialog
{
// Construction
public:
//CBaseDialog(CWnd* pParent = NULL); // standard constructor
CBaseDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL );
DECLARE_DYNAMIC(CBaseDialog);
// Dialog Data
//enum { IDD = IDD_DIALOG1 };
//{{AFX_DATA(CBaseDialog)
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CBaseDialog)
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HBITMAP m_BackGroundBmp;
// Generated message map functions
//{{AFX_MSG(CBaseDialog)
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_BASEDIALOG_H__11845BE8_17FB_44EB_A9AC_E09F2DE4FA7D__INCLUDED_)
//virtual void OnOK();
[解决办法]
重载 WindowPorc 返回基类的 WindowProc
[解决办法]
注意:
//{{AFX_MSG(CBaseDialog)
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
------解决方案--------------------
在CBaseDialog 中加:
void CBaseDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
AfxMessageBox("Msg has been dilived to BaseDialog!");
CDialog::OnLButtonDown(nFlags, point);
}
其他 对话框 无 OnLButtonDown
那么点击 对话框 (非控件),可以看到 "Msg has been dilived to BaseDialog!"
消息被 传递(非继承)到 CBaseDialo