在VC6中可以在资源中新建DialogBar的对话框资源,但在类向导中创建新类时却不见CDialogBar的踪影。好在MSDN上有手动添加的方法可以参考。
1.在新建类(CMyDiagBar)时,将基类选为CDialog
2.在MyDiagBar.cpp中修改消息映射定义
BEGIN_MESSAGE_MAP(CMyDiagBar, CDialog) //原始
BEGIN_MESSAGE_MAP(CMyDiagBar, CDialogBar) //修改后
3.在MyDiagBar.h中修改
class CMyDiagBar : public CDialog //原始
class CMyDiagBar : public CDialogBar //修改后
4.修改构造函数
原始:
CMyDiagBar(CWnd* pParent = NULL); //MyDiagBar.h中
CMyDiagBar::CMyDiagBar(CWnd* pParent /*=NULL*/)
:CDialog(CMyDiagBar::IDD, pParent) //MyDiagBar.cpp中
修改后:
CMyDiagBar(); //MyDiagBar.h中
CMyDiagBar::CMyDiagBar() //MyDiagBar.cpp中
5.在MyDiagBar.cpp中修改成员函数DoDataExchange(...)函数体
CDialog::DoDataExchange(pDX); //原始
CDialogBar::DoDataExchange(pDX); //修改后
至此,新类已经可以编译无误了。特例是:如果你要新类响应WM_INITDIALOG消息的话,需要继续如下的修改
1.为新类添加WM_INITDIALOG消息的处理函数
2.在MyDiagBar.h中修改消息函数声明
原始:
// Generated message map functions
//{{AFX_MSG(CMyDiagBar)
virtual BOOL OnInitDialog(); //删除此行
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
修改后:
// Generated message map functions
//{{AFX_MSG(CMyDiagBar)
//}}AFX_MSG
afx_msg LONG OnInitDialog ( UINT, LONG ); //添加此行
DECLARE_MESSAGE_MAP()
3.在MyDiagBar.cpp中修改消息映射定义
原始:
BEGIN_MESSAGE_MAP(CMyDiagBar, CDialogBar)
//{{AFX_MSG_MAP(CMyDiagBar)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
修改后:
BEGIN_MESSAGE_MAP(CMyDiagBar, CDialogBar)
//{{AFX_MSG_MAP(CMyDiagBar)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_INITDIALOG, OnInitDialog ) //添加此行
END_MESSAGE_MAP()
4.在MyDiagBar.cpp中修改OnInitDialog(...)函数
原始:
BOOL CMyDiagBar::OnInitDialog()
{
CDialogBar::OnInitDialog();
return TRUE;
}
修改后:
LONG CMyDiagBar::OnInitDialog ( UINT wParam, LONG lParam)
{
BOOL bRet = HandleInitDialog(wParam, lParam);
if (!UpdateData(FALSE))
{
TRACE0("Warning: UpdateData failed during dialog init./n");
}
return bRet;
}
到此为止,新类已经完全修改为CDialogBar的继承类了。