资源描述:
《CDialogBar的创建和使用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、CDialogBar的创建和使用—个朋友让我看一个关于DialogBar的程序,问题是在一个DialogBar中添加一个TreeContro1控件,在初始化函数OnlnitDialog中使用Insertltem添加一项,结果运行后,始终在DialogBar中显示不出来,后來我又加入了一个Button测试,结果Button是灰色的,根本不能点击。在OnlnitDialog屮加入断点,程序根本执行不到这个函数。按理说,界面已经显示出来了,早应该调用OnlnitDialog函数了。当时百思不得其解。后来在网上查了一下,才知道CDialogBar根本没有重载0nl
2、nitDialog这个函数(你查-下MSDN,就知道CDialog是重载了这个函数的),所以导致我虽然有这个函数,但是始终不调用。这就需要我手动添加这个消息映射。我通过ON_MESSAGE宏,映射了这个消息响应函数,运行结果没问题,TreeControl中有我添加的项了。剩下的就是Button不能用的问题了。通过网上和自己试验,知道在DialogBar中,Button发111的消息根本就不通过DialogBar,而是直接发到MainFrame中,所以只要在MainFrame屮进行响应或者把消息再转发到DialogBar屮就可以了。我在CMainFrame类
3、屮重载了OnCmdMsg这个函数,在这个函数中,先用DialogBar去拦截消息,这样,只需要在DialogBar中取相应Button的消息就可以了。下面是我做试验的大致过程:1、创建一个单文档的MFC工稈,名为MyDialogBaro2、要使用DialogBar,当然首先要在ResourceView屮添加一个DialogBar(。添加好TDialogBar,ID采用默认的IDD.DIALOGBAR,至于它的properties,就采用默认的好了。3、添加一个TreeControl,ID为IDC_TREE,在它的properties对话框Styles选项卡
4、中选择Hasbuttons>HaslinesLinesatroot三个选项,看起来就比较正常了。4、然后为这个DialogBar添加一个类,类名为CDlgBar,继承自CDialog,因为在向导中没有CDialogBar这个基类。然后把它的WM.INITDIALOG消息响应函数加上,记住这时我们的DialogBar还是一个CDialog的子类呢。然后给TreeControl映射变量m_treeo5、下面就轮到对我们自己的DialogBar动手脚了。(1)首先中把CDlgBar的基类改成CDialogBar,然后在.cpp文件中,把CDialogBar的构造
5、函数的对CDialog的构造函数去掉,即:将CDlgBar::CDlgBar(CWnd*pParent/*=NULL*/):CDialog(CDlgBar::IDD,pParent)修改为CDIgBarzzCDlgBarCCWnd*pParent/*=NULL*/)(2)然后把DoDataExchange函数屮的CDialog::DoDataExchange(pDX);一句改成CDialogBar::DoDataExchange(pDX);«(3)把BEGIN_MESSAGE_MAP(CDlgBar,CDialog)屮的CDialog改成CDialogBa
6、ro(4)把OnlnitDialog函数中的CDialog::OnInitDialog();一句去掉。6、在OnlnitDialog屮添加向TreeControl屮插入数据的语句:BOOLCDlgBar::OnInitDialog(){HTREEITEMhParent=m_tree.lnsertltem(nparentn);m_tree.lnsertltem(*1boy**,hParent);m_treeJnsertItem(**girl*1,hParent);returnTRUE;//returnTRUEunlessyousetthefocustoaco
7、ntrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSE}7^在CMainFrame*-p添加一个变暈:CDlgBarm_wndDlgBar;,当然不能忘了include进头文件DlgBar.ho然后在它的OnCreate函数川创建DialogBaro添加如下语句:if(!m_wndDlgBar.Create(this,IDD_DIALOGBAR,WS_CHILD
8、WS.VISIBLE
9、CBRS_LEFT
10、CBRS.GRIPPER
11、CBRS.TOOLTIPS
12、CBRS.FLYBY
13、CBRS_SIZE_DYNAMI
14、C,IDD_DIALOGBAR)){TRACEO(HFailedt