创建基类为CDialogBar类与对话框关联,但是基类列表里找不到CDialogBar,解决如下:
先创建基于CDialog的派生类:打开ClassWizard,为以上创建的资源添加一个以CDialog为基类的派生类(因为ClassWizard没有将CDialogBar列在基类目录清单中,所以用户只能先以CDialog类派生)。
再修改派生类以CDialogBar为基类:手工修改几处代码,派生类以COnlineBar命名。(注:手工改动以红色显示)
1、 在头文件中修改继承关系
将class COnlineBar : public CDialog 改为 class COnlineBar : public CDialogBar
2、 在代码文件中修该构造函数继承关系
将COnlineBar::CDataStatus(CWnd* pParent )
: CDialog(COnlineBar::IDD, pParent)
{
//{{AFX_DATA_INIT(CDataStatus)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
改为
COnlineBar::COnlineBar(CWnd* pParent )
{
//{{AFX_DATA_INIT(COnlineBar)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
3、 将DDX绑定函数中的继承关系去掉
即将void COnlineBar::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COnlineBar)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
改为
void COnlineBar::DoDataExchange(CDataExchange* pDX)
{
CDialogBar::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COnlineBar)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
4、重新初始化函数(这个相当重要,如果不这么做的话,DDX函数形同虚设,当然用户的工具条如果没有用到DDX的话当然可以不加这段代码):
其次手工修改代码如下:
添加消息映射函数。由于对话框形式的初始化函数消息并未加载到消息映射内,为此我们需要手工添加,要不然代码无法拦截该工具条的初始化消息,形式如下:
将BEGIN_MESSAGE_MAP(COnlineBar, CDialog)
//{{AFX_MSG_MAP(COnlineBar)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
改为:
BEGIN_MESSAGE_MAP(COnlineBar, CDialogBar)
//{{AFX_MSG_MAP(COnlineBar)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
以上转自:http://blog.youkuaiyun.com/newshowing/article/details/5387875