没有合适的资源?快使用搜索试试~ 我知道了~
首页CDialogBar的创建和使用
CDialogBar的创建和使用
5星 · 超过95%的资源 需积分: 10 18 下载量 158 浏览量
更新于2023-03-16
收藏 72KB DOC 举报
CDialogBar的创建和使用 一个朋友让我看一个关于DialogBar的程序,问题是在一个DialogBar中添加一个Tree Control控件,在初始化函数OnInitDialog中使用InsertItem添加一项,结果运行后,始终在DialogBar中显示不出来,后来我又加入了一个Button测试,结果Button是灰色的,根本不能点击。在OnInitDialog中加入断点,程序根本执行不到这个函数。按理说,界面已经显示出来了,早应该调用OnInitDialog函数了。当时百思不得其解。 后来在网上查了一下,才知道CDialogBar根本没有重载OnInitDialog这个函数(你查一下MSDN,就知道CDialog是重载了这个函数的),所以导致我虽然有这个函数,但是始终不调用。这就需要我手动添加这个消息映射。我通过ON_MESSAGE宏,映射了这个消息响应函数,运行结果没问题,Tree Control中有我添加的项了。
资源详情
资源推荐
CDialogBar 的创建和使用
一个朋友让我看一个关于 DialogBar 的程序,问题是在一个 DialogBar 中添加一个 Tree Control 控件,
在初始化函数 OnInitDialog 中使用 InsertItem 添加一项,结果运行后,始终在 DialogBar 中显示不出来,
后来我又加入了一个 Button 测试,结果 Button 是灰色的,根本不能点击。在 OnInitDialog 中加入断点,
程序根本执行不到这个函数。按理说,界面已经显示出来了,早应该调用 OnInitDialog 函数了。当时百
思不得其解。
后来在网上查了一下,才知道 CDialogBar 根本没有重载 OnInitDialog 这个函数(你查一下 MSDN,
就知道 CDialog 是重载了这个函数的),所以导致我虽然有这个函数,但是始终不调用。这就需要我手
动添加这个消息映射。我通过 ON_MESSAGE 宏,映射了这个消息响应函数,运行结果没问题,Tree
Control 中有我添加的项了。
剩下的就是 Button 不能用的问题了。通过网上和自己试验,知道在 DialogBar 中,Button 发出的消
息根本就不通过 DialogBar,而是直接发到 MainFrame 中,所以只要在 MainFrame 中进行响应或者把消
息再转发到 DialogBar 中就可以了。我在 CMainFrame 类中重载了 OnCmdMsg 这个函数,在这个函数中,
先用 DialogBar 去拦截消息,这样,只需要在 DialogBar 中取相应 Button 的消息就可以了。
下面是我做试验的大致过程:
1、 创建一个单文档的 MFC 工程,名为 MyDialogBar。
2、 要使用 DialogBar,当然首先要在 ResourceView 中添加一个 DialogBar 了。添加好了
DialogBar,ID 采用默认的 IDD_DIALOGBAR,至于它的 properties,就采用默认的好了。
3、 添加一个 Tree Control,ID 为 IDC_TREE,在它的 properties 对话框 Styles 选项卡中选择 Has
buttons、Has lines、Lines at root 三个选项,看起来就比较正常了。
4、 然后为这个 DialogBar 添加一个类,类名为 CDlgBar,继承自 CDialog,因为在向导中没有
CDialogBar 这个基类。然后把它的 WM_INITDIALOG 消息响应函数加上,记住这时我们的
DialogBar 还是一个 CDialog 的子类呢。然后给 Tree Control 映射变量 m_tree。
5、 下面就轮到对我们自己的 DialogBar 动手脚了。
(1)首先中把 CDlgBar 的基类改成 CDialogBar,然后在.cpp 文件中,把 CDialogBar 的构造函
数的对 CDialog 的构造函数去掉,即:
将 CDlgBar::CDlgBar(CWnd* pParent /*=NULL*/):CDialog(CDlgBar::IDD, pParent)修改为
CDlgBar::CDlgBar(CWnd* pParent /*=NULL*/)
(2)然后把 DoDataExchange 函数中的 CDialog::DoDataExchange(pDX);一句改成
CDialogBar::DoDataExchange(pDX);。
(3)把 BEGIN_MESSAGE_MAP(CDlgBar, CDialog)中的 CDialog 改成 CDialogBar。
(4)把 OnInitDialog 函数中的 CDialog::OnInitDialog();一句去掉。
6、 在 OnInitDialog 中添加向 Tree Control 中插入数据的语句:
BOOL CDlgBar::OnInitDialog()
{
HTREEITEM hParent = m_tree.InsertItem("parent");
m_tree.InsertItem("boy", hParent);
m_tree.InsertItem("girl", hParent);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
7、 在 CMainFrame 中添加一个变量:CDlgBar m_wndDlgBar;,当然不能忘了 include 进头文件
DlgBar.h。然后在它的 OnCreate 函数中创建 DialogBar。添加如下语句:
if (!m_wnd9999999999999 DlgBar.Create(this, IDD_DIALOGBAR, WS_CHILD | WS_VISIBLE |
999999999999999999999999999999 CBRS_LEFT | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY |
999999999999999999999999999999 CBRS_SIZE_DYNAMIC, IDD_DIALOGBAR))
{
9999999 TRACE0("Failed to create dialogbar");
999999 return -1; // fail to create
amohan
- 粉丝: 87
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 保险服务门店新年工作计划PPT.pptx
- 车辆安全工作计划PPT.pptx
- ipqc工作总结PPT.pptx
- 车间员工上半年工作总结PPT.pptx
- 保险公司员工的工作总结PPT.pptx
- 报价工作总结PPT.pptx
- 冲压车间实习工作总结PPT.pptx
- ktv周工作总结PPT.pptx
- 保育院总务工作计划PPT.pptx
- xx年度现代教育技术工作总结PPT.pptx
- 出纳的年终总结PPT.pptx
- 贝贝班班级工作计划PPT.pptx
- 变电值班员技术个人工作总结PPT.pptx
- 大学生读书活动策划书PPT.pptx
- 财务出纳月工作总结PPT.pptx
- 大学生“三支一扶”服务期满工作总结(2)PPT.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功