本文转自:http://blog.csdn.net/lh1162810317/article/details/11820889
一般的控件在基于对话框的mfc程序中使用非常方便,但在单文档的mfc中却有点麻烦。因为单文档的框架不能直接加各种各样控件,这些控件必须要加在对话框中,然后再把对话框镶嵌在单文档的mfc框架中。刚开始我没注意到这点,所以一直在找各种各样控件,找了很久都没找到。后来才意识到这点——控件只能直接加在对话框中,而我的是单文档的框架,所以找不到控件。后来在网上找了很多资料,终于把树形控件镶嵌进框架里面。但还没能对其进行消息映射。先做个小结吧!
一,先在Resource View 下的Dialog中鼠标右键-》添加资源-》添加一个CDialogBar。然后CDialogBar 中添加树形控件。二,给CDialogBar添加一个类CDlgBar,用类向导建,父类就直接写CDialogBar。
三,直接定义两个函数virtual BOOL Create(CWnd* pParentWnd,UINT nIDTemplate,UINT nStyle,UINT nID);
BOOL InitDialogBar();
四,函数的实现:
- BOOL CDlgBar::InitDialogBar()
- {
- UpdateData(FALSE);//这个一定要啊,这样就会有和CDialog一样的数据交换效果了
- return TRUE;
- }
- BOOL CDlgBar::Create(CWnd* pParentWnd,UINT nIDTemplate,UINT nStyle,UINT nID)
- {
- // TODO: Add your specialized code here and/or call the base class
- BOOL bRes= CDialogBar::Create(pParentWnd,nIDTemplate,nStyle,nID );
- InitDialogBar();//在类中添加一个成员函数就可以了
- return bRes;
- }
五在MainFrame中创建对话条
1,先在MainFrame.h中声明一个CDlgBar 对象CDlgBar m_DlgBar;(注意将头文件包含进来#include "DlgBar.h")
2.在MainFrame.cpp中实现如下:
- int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
- return -1;
- // TODO: Add your specialized creation code here
- if (!m_DlgBar.Create(this, IDD_DIALOGBAR, WS_CHILD | WS_VISIBLE |CBRS_LEFT | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY |
- CBRS_SIZE_DYNAMIC, IDD_DIALOGBAR))
- {
- TRACE0("Failed to create dialogbar/n");
- return -1; // fail to create
- }
- m_DlgBar.EnableDocking(CBRS_ALIGN_ANY);
- EnableDocking(CBRS_ALIGN_ANY);
- DockControlBar(&m_DlgBar);
- return 0;
- }
其中对话条的ID: IDD_DIALOGBAR是默认的没改。
这样运行下应该就在单文档的框架左边出现了一个框,只是里面的树什么也没有。后面再介绍树形控件的消息处理。