关于CDialogBar的使用

 环境:VC6.0 SP6

最近在一个程序需要用到CDialogBar,于是按照一般步骤,先在资源视图中添加了一个Dialog,定义好了ID。然后添加了一些需要的EDIT_BOX和COMBOBOX。

由于需要初始化其中的一些控件,于是按照CDialog的方式开始用ClassWizard添加控件。此时发现提示“没有关联的类,是否建立一个新的类”。然后很自然的点击了“是”。然后在CMainFrame 中添加了CDialogBar m_dlgBarXXX的声明。等一切准备好,开始编译才发现出现错误!

原因:CDialog不是继承于CDialog的,而是CControlBar。

开始我试着把所有的CDialog都改为CDialogBar,但还是不行。试图从Class Wizard中直接继承于CDialogBar,居然没有CDialogBar这个基类……FT

原因:CDialogBar没有初始化函数OnInitDialog,而且其默认的构造函数也有区别。

如何使用CDialogBar呢?google一下还是有点收获,还是可以通过自己修改解决的。

首先,还是按照正常的方式,在资源对话框中添加CDialogBar的资源,然后以这个ID建立一个CDialog的类CDlgbarXXX。此时这个类是基于CDialog的。

然后,在CDlgBarXXX类中(包括h文件和cpp文件),将所有的CDialog都替换为CDialogBar。并且在cpp文件中的BEGIN_MESSAGE_MAP也做同样的修改。

接着,在cpp文件中,将默认的构造函数改为如下

CDlgBarXXX :: CDlgBarXXX()

{

    // ...

}

此时,编译通过就没有问题了……但你会发现不能使用OnInitDialog???

继续,在h文件的//}}AFX_MSG下一行,插入以下代码

afx_msg LONG OnInitDialog(UINT, LONG);

cpp文件中需要在//}}AFX_MSG_MAP下面添加

ON_MESSAGE(WM_INITDIALOG, OnInitDialog)

再在cpp文件中添加下面的代码

LONG CDlgbarXXX::OnInitDialog(UINT wParam, LONG lParam)
{
    BOOL bRet = HandleInitDialog(wParam, lParam);
   
    if(!UpdateData(FALSE))
    {
        TRACE0("Warning, Unalbe to init update./n");
    }
   
// Add Code here
   

    return bRet;
}

另外还有CButton的使用,如果不加其他说明,CButton显示出来将会是灰色,无法点击,即使你用Class Wizard添加了Click的代码。

解决方法:在h文件中添加

afx_msg void OnUpdateButton(CCmdUI * pCmdUI);

在cpp文件中添加消息映射

ON_UPDATE_COMMAND_UI(IDC_BUTTON, OnUpdateButton)

以及响应函数

void CDlgbarXXX::OnUpdateButton(CCmdUI * pCmdUI)

{
    pCmdUI -> Enable(TRUE);
}

现在,你就可以象使用CDialog一样,使用CDialogBar了……

参见:

http://support.microsoft.com/default.aspx?scid=kb;EN-US;q185672

 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值