CDockablePane类的使用.doc
《CDockablePane类的使用.doc》由会员分享,可在线阅读,更多相关《CDockablePane类的使用.doc(19页珍藏版)》请在三一办公上搜索。
1、-CDockablePane类的使用目录CDockablePane与对话框类联合使用方法2CDockablePane与CTreeCtrl类联合使用的方法2CDockablePane同CFormView类的联合使用方法2两个带图标的CDockablePane派生类与CFormView类的联合使用方法2CDockablePane类的布局设计2CDockablePane窗口风格设置2去除VS2021风格的框架菜单2在View视图类中使用CSplitterWnd来拆分视图窗口不在CMainFrame类的虚函数OnCreateClient中拆分视图框架窗口2制止dockablepane停靠浮动拖动2VS
2、2021菜单修改不了问题2VS2021 DockablePane 每次翻开都自动隐藏2EnableDocking函数解释2CDockablePane与对话框类联合使用方法1、新建对话框资源:新建一个对话框资源IDD_DIALOG_DOCKDLG,Style设为Child,Border设为None;把默认的OK和Cancel按键去掉,因为一般情况下点击这两个按钮后,对话框会销毁,而这里是不需要销毁的如果没去掉点击了,悬浮框中的对话框容就不能用了;如下添加一个按钮IDC_BUTTON_TEST,后为对话框添加类CTestDlg;为按钮添加响应void CTestDlg:OnBnClickedBut
3、tonTest() / TODO: Add your control notification handler code here MessageBo*(_T(Hello World!);2、派生CDockablePane类添加继承自CDockablePane的类CMyPane添加此类的WM_CREATE和WM_SIZE消息响应,并添加上面对话框的成员变量CTestDlg m_TestDlg;在CMyPane:OnCreate和CMyPane:OnSize函数中添加代码int CMyPane:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CDockab
4、lePane:OnCreate(lpCreateStruct) = -1) return -1; / TODO: Add your specialized creation code here CRect rectDummy; rectDummy.SetRectEmpty(); / 创立选项卡窗口: if (!m_TestDlg.Create(IDD_DIALOG_DOCKDLG,this) TRACE0(未能创立输出选项卡窗口/n); return -1; / 未能创立 m_TestDlg.ShowWindow(SW_SHOW); return 0;void CMyPane:OnSize(U
5、INT nType, int c*, int cy) CDockablePane:OnSize(nType, c*, cy); / TODO: Add your message handler code here / 选项卡控件应覆盖整个工作区m_TestDlg.SetWindowPos (this, -1, -1, c*, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER); m_TestDlg.ShowWindow(SW_SHOW);3、修改MainFrame类然后在MainFrame.h代码中添加成员变量CMyPane m_MyPane;在CM
6、ainFrame:OnCreate函数中添加代码if (!m_wndStatusBar.Create(this) TRACE0(Failed to create status barn); return -1; / fail to createm_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT);if (!m_MyPane.Create(_T(MyPane), this, CRect(0, 0, 100, 100), TRUE, IDD_DIALOG_DOCKDLG, WS_CHILD | WS_VIS
7、IBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI) TRACE0(未能创立输出窗口/n); return FALSE;m_MyPane.EnableDocking(CBRS_ALIGN_ANY);/ TODO: Delete these five lines if you dont want the toolbar and menubar to be dockablem_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);m_wndToolBar.EnableDockin
8、g(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_wndMenuBar);DockPane(&m_wndToolBar);DockPane(&m_MyPane); / 调整m_MyPane的大小使之适合父窗口4、运行结果5、补充 CDockablePane派生类销毁时,对话框也销毁掉没有试验void ControlPanel:OnDestroy() CDockablePane:OnDestroy(); / TODO: Add your message handler code herem_dlg.DestroyWindow(
9、); CDockablePane派生类对象的Create函数里面的666是这个停靠栏的ID,这里是随便指定的一个数值,只要不和其他已用资源重复即可,真正应用的时候,以在字符串表中添加一个ID,前面使用的是对话框的IDD m_Panel.Create(_T(tset),this,CRect(0,0,300,300),TRUE,666,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI);CDockablePane与CTreeCtrl类联合使用的方法1、从CDockable
10、Pane继承,创立一个自定义类avView avView.h的代码*pragma once/ avViewclass avView : public CDockablePane DECLARE_DYNAMIC(avView)public: avView(); virtual avView();protected: af*_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); af*_msg void OnSize(UINT nType, int c*, int cy);public:CTreeCtrl m_wndClassView;void Adju
11、stLayout();protected: DECLARE_MESSAGE_MAP(); avView.cpp的代码/ NavView.cpp : implementation file/*include stdaf*.h*include MDISample.h*include NavView.h/ avViewIMPLEMENT_DYNAMIC(avView, CDockablePane)avView:avView()avView:avView()BEGIN_MESSAGE_MAP(avView, CDockablePane) ON_WM_CREATE() ON_WM_SIZE()END_M
12、ESSAGE_MAP()void avView:OnSize(UINT nType, int c*, int cy) CDockablePane:OnSize(nType, c*, cy);AdjustLayout();void avView:AdjustLayout() if (GetSafeHwnd() = NULL) return; CRect rectClient; GetClientRect(rectClient); int cyTlb = 3;m_wndClassView.SetWindowPos(NULL, rectClient.left + 1, rectClient.top
13、+ cyTlb + 1, rectClient.Width() - 2, rectClient.Height() - cyTlb - 2, SWP_NOACTIVATE | SWP_NOZORDER);/ avView message handlersint avView:OnCreate(LPCREATESTRUCT lpCreateStruct) CRect rectDummy; rectDummy.SetRectEmpty(); / Create views: const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES |
14、 TVS_LINESATROOT | TVS_HASBUTTONS | WS_CLIPSIBLINGS | WS_CLIPCHILDREN; if (!m_wndClassView.Create(dwViewStyle, rectDummy, this, 2) TRACE0(Failed to create Class View/n); return -1; / fail to create HTREEITEM hRoot = m_wndClassView.InsertItem(_T(FakeApp classes), 0, 0); m_wndClassView.SetItemState(hR
15、oot, TVIS_BOLD, TVIS_BOLD); HTREEITEM hClass = m_wndClassView.InsertItem(_T(CFakeAboutDlg), 1, 1, hRoot); m_wndClassView.InsertItem(_T(CFakeAboutDlg(), 3, 3, hClass); m_wndClassView.E*pand(hRoot, TVE_E*PAND); hClass = m_wndClassView.InsertItem(_T(CFakeApp), 1, 1, hRoot); m_wndClassView.InsertItem(_T
16、(CFakeApp(), 3, 3, hClass); m_wndClassView.InsertItem(_T(InitInstance(), 3, 3, hClass); m_wndClassView.InsertItem(_T(OnAppAbout(), 3, 3, hClass); hClass = m_wndClassView.InsertItem(_T(CFakeAppDoc), 1, 1, hRoot); m_wndClassView.InsertItem(_T(CFakeAppDoc(), 4, 4, hClass); m_wndClassView.InsertItem(_T(
17、CFakeAppDoc(), 3, 3, hClass); m_wndClassView.InsertItem(_T(OnNewDocument(), 3, 3, hClass); hClass = m_wndClassView.InsertItem(_T(CFakeAppView), 1, 1, hRoot); m_wndClassView.InsertItem(_T(CFakeAppView(), 4, 4, hClass); m_wndClassView.InsertItem(_T(CFakeAppView(), 3, 3, hClass); m_wndClassView.InsertI
18、tem(_T(GetDocument(), 3, 3, hClass); m_wndClassView.E*pand(hClass, TVE_E*PAND); hClass = m_wndClassView.InsertItem(_T(CFakeAppFrame), 1, 1, hRoot); m_wndClassView.InsertItem(_T(CFakeAppFrame(), 3, 3, hClass); m_wndClassView.InsertItem(_T(CFakeAppFrame(), 3, 3, hClass); m_wndClassView.InsertItem(_T(m
19、_wndMenuBar), 6, 6, hClass); m_wndClassView.InsertItem(_T(m_wndToolBar), 6, 6, hClass); m_wndClassView.InsertItem(_T(m_wndStatusBar), 6, 6, hClass); hClass = m_wndClassView.InsertItem(_T(Globals), 2, 2, hRoot); m_wndClassView.InsertItem(_T(theFakeApp), 5, 5, hClass); m_wndClassView.E*pand(hClass, TV
20、E_E*PAND); return 0;2、修改MainFrm.cpp OnCreate方法最后参加如下代码CString str;str.LoadString(ID_VIEW_NAV);if (!m_Nav.Create(str, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_NAV, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI) TRACE0(Failed to create navigate window/n); r
21、eturn FALSE; / failed to createm_Nav.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Nav);/ ID_VIEW_NAV是自定义的字符串资源CDockablePane同CFormView类的联合使用方法1、CFormView简介 MFC提供了一个名为CFormView的特殊视图类,我们称其为表单视图表单视图是指用控件来输入和输出数据的视图,用户可以方便地在表单视图中使用控件表单视图具有对话框和滚动视图的特性,它使程序看起来象是一个具有滚动条的对话框在有些情况下,用表单视图比用普通视图更符合用户的需要,例如,在向数据库输入
22、数据时,显然用表单的形式可以更习惯些。用AppWizard可以方便地创立基于表单视图的应用程序,只要在MFC AppWizard对话框的第六步先选择CView,然后在Base class栏中选择CFormView,AppWizard就会创立一个基于CFormView的应用程序读者可以按上述方法建立一个名为Test的应用程序在Test工程的资源中,读者会发现一个ID为IDD_TEST_FORM的对话框模板,该对话框模板可供用户放置和安排控件在程序运行时,框架根据该对话框模板创立CFormView对象,并根据模板的信息在表单视图中自动创立控件与设计对话框类相类似,用户可以用ClassWizard为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CDockablePane 使用
链接地址:https://www.31ppt.com/p-1087526.html