创建MFC类,基类列表里找不到CDialogBar

在MFC中创建CDialogBar派生类时,由于ClassWizard基类列表未包含CDialogBar,需要手动操作。首先创建CDialog派生类,然后修改头文件和代码文件中的继承关系,将CDialog替换为CDialogBar。接着,更新DoDataExchange函数调用CDialogBar版本,并添加消息映射以确保初始化正确。通过这些步骤,可以成功创建与对话框关联的CDialogBar类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建基类为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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值