CDockablePane類的使用_第1頁
CDockablePane類的使用_第2頁
CDockablePane類的使用_第3頁
CDockablePane類的使用_第4頁
CDockablePane類的使用_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、CDockablePane類的使用目錄CDockablePane與對(duì)話框類聯(lián)合使用方法2CDockablePane與CTreeCtrl類聯(lián)合使用的方法6CDockablePane同CFormView類的聯(lián)合使用方法9兩個(gè)帶圖標(biāo)的CDockablePane派生類與CFormView類的聯(lián)合使用方法12CDockablePane類的布局設(shè)計(jì)15CDockablePane窗口風(fēng)格設(shè)置22去除VS2010風(fēng)格的框架菜單23在View視圖類中使用CSplitterWnd來拆分視圖窗口(不在CMainFrame類的虛函數(shù)OnCreateClient中拆分視圖框架窗口)24禁止dockablepane??扛?/p>

2、動(dòng)拖動(dòng)26VS2010菜單修改不了問題27VS2010 DockablePane 每次打開都自動(dòng)隱藏29EnableDocking函數(shù)解釋30CDockablePane與對(duì)話框類聯(lián)合使用方法1、新建對(duì)話框資源: 新建一個(gè)對(duì)話框資源IDD_DIALOG_DOCKDLG,Style設(shè)為Child,Border設(shè)為None; 把默認(rèn)的OK和Cancel按鍵去掉,因?yàn)橐话闱闆r下點(diǎn)擊這兩個(gè)按鈕后,對(duì)話框會(huì)銷毀,而這里是不需要銷毀的(如果沒去掉點(diǎn)擊了,懸浮框中的對(duì)話框內(nèi)容就不能用了); 如下添加一個(gè)按鈕IDC_BUTTON_TEST,后為對(duì)話框添加類CTestDlg; 為按鈕添加響應(yīng)void CTestD

3、lg:OnBnClickedButtonTest() / TODO: Add your control notification handler code here MessageBox(_T("Hello World!");2、派生CDockablePane類 添加繼承自CDockablePane的類CMyPane 添加此類的WM_CREATE和WM_SIZE消息響應(yīng),并添加上面對(duì)話框的成員變量CTestDlg m_TestDlg; 在CMyPane:OnCreate和CMyPane:OnSize函數(shù)中添加代碼int CMyPane:OnCreate(LPCREATEST

4、RUCT lpCreateStruct) if (CDockablePane:OnCreate(lpCreateStruct) = -1) return -1; / TODO: Add your specialized creation code here CRect rectDummy; rectDummy.SetRectEmpty(); / 創(chuàng)建選項(xiàng)卡窗口: if (!m_TestDlg.Create(IDD_DIALOG_DOCKDLG,this) TRACE0("未能創(chuàng)建輸出選項(xiàng)卡窗口/n"); return -1; / 未能創(chuàng)建 m_TestDlg.ShowWin

5、dow(SW_SHOW); return 0;void CMyPane:OnSize(UINT nType, int cx, int cy) CDockablePane:OnSize(nType, cx, cy); / TODO: Add your message handler code here / 選項(xiàng)卡控件應(yīng)覆蓋整個(gè)工作區(qū) m_TestDlg.SetWindowPos (this, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER); m_TestDlg.ShowWindow(SW_SHOW);3、修改MainFram

6、e類 然后在MainFrame.h代碼中添加成員變量CMyPane m_MyPane; 在CMainFrame:OnCreate函數(shù)中添加代碼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"), t

7、his, CRect(0, 0, 100, 100), TRUE, IDD_DIALOG_DOCKDLG, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI) TRACE0("未能創(chuàng)建輸出窗口/n"); return FALSE;m_MyPane.EnableDocking(CBRS_ALIGN_ANY);/ TODO: Delete these five lines if you don't want the toolbar and me

8、nubar to be dockablem_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_wndMenuBar);DockPane(&m_wndToolBar);DockPane(&m_MyPane); / 調(diào)整m_MyPane的大小使之適合父窗口4、運(yùn)行結(jié)果5、補(bǔ)充 CDockablePane派生類銷毀時(shí),對(duì)話框也銷毀掉(沒有試驗(yàn)) void ControlPane

9、l:OnDestroy() CDockablePane:OnDestroy(); / TODO: Add your message handler code here m_dlg.DestroyWindow(); CDockablePane派生類對(duì)象的Create函數(shù)里面的666是這個(gè)停靠欄的ID,這里是隨便指定的一個(gè)數(shù)值,只要不和其他已用資源重復(fù)即可,真正應(yīng)用的時(shí)候,以在字符串表中添加一個(gè)ID,前面使用的是對(duì)話框的IDD m_Panel.Create(_T("tset"),this,CRect(0,0,300,300),TRUE,666,WS_CHILD | WS_VIS

10、IBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI);CDockablePane與CTreeCtrl類聯(lián)合使用的方法1、從CDockablePane繼承,創(chuàng)建一個(gè)自定義類CNavView CNavView.h的代碼#pragma once/ CNavViewclass CNavView : public CDockablePane DECLARE_DYNAMIC(CNavView)public: CNavView(); virtual CNavView();protected: afx_msg int

11、OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnSize(UINT nType, int cx, int cy);public: CTreeCtrl m_wndClassView; void AdjustLayout();protected: DECLARE_MESSAGE_MAP(); CNavView.cpp的代碼/ NavView.cpp : implementation file/#include "stdafx.h"#include "MDISample.h"#include &q

12、uot;NavView.h"/ CNavViewIMPLEMENT_DYNAMIC(CNavView, CDockablePane)CNavView:CNavView()CNavView:CNavView()BEGIN_MESSAGE_MAP(CNavView, CDockablePane) ON_WM_CREATE() ON_WM_SIZE()END_MESSAGE_MAP()void CNavView:OnSize(UINT nType, int cx, int cy) CDockablePane:OnSize(nType, cx, cy); AdjustLayout();voi

13、d CNavView:AdjustLayout() if (GetSafeHwnd() = NULL) return; CRect rectClient; GetClientRect(rectClient); int cyTlb = 3; m_wndClassView.SetWindowPos(NULL, rectClient.left + 1, rectClient.top + cyTlb + 1, rectClient.Width() - 2, rectClient.Height() - cyTlb - 2, SWP_NOACTIVATE | SWP_NOZORDER);/ CNavVie

14、w message handlersint CNavView:OnCreate(LPCREATESTRUCT lpCreateStruct) CRect rectDummy; rectDummy.SetRectEmpty(); / Create views: const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | WS_CLIPSIBLINGS | WS_CLIPCHILDREN; if (!m_wndClassView.Create(dwViewSt

15、yle, 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(hRoot, TVIS_BOLD, TVIS_BOLD); HTREEITEM hClass = m_wndClassView.InsertItem(_T("

16、CFakeAboutDlg"), 1, 1, hRoot); m_wndClassView.InsertItem(_T("CFakeAboutDlg()"), 3, 3, hClass); m_wndClassView.Expand(hRoot, TVE_EXPAND); hClass = m_wndClassView.InsertItem(_T("CFakeApp"), 1, 1, hRoot); m_wndClassView.InsertItem(_T("CFakeApp()"), 3, 3, hClass); m_wn

17、dClassView.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_wndClass

18、View.InsertItem(_T("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_wndClassVi

19、ew.InsertItem(_T("CFakeAppView()"), 3, 3, hClass); m_wndClassView.InsertItem(_T("GetDocument()"), 3, 3, hClass); m_wndClassView.Expand(hClass, TVE_EXPAND); hClass = m_wndClassView.InsertItem(_T("CFakeAppFrame"), 1, 1, hRoot); m_wndClassView.InsertItem(_T("CFakeAppF

20、rame()"), 3, 3, hClass); m_wndClassView.InsertItem(_T("CFakeAppFrame()"), 3, 3, hClass); m_wndClassView.InsertItem(_T("m_wndMenuBar"), 6, 6, hClass); m_wndClassView.InsertItem(_T("m_wndToolBar"), 6, 6, hClass); m_wndClassView.InsertItem(_T("m_wndStatusBar"

21、;), 6, 6, hClass); hClass = m_wndClassView.InsertItem(_T("Globals"), 2, 2, hRoot); m_wndClassView.InsertItem(_T("theFakeApp"), 5, 5, hClass); m_wndClassView.Expand(hClass, TVE_EXPAND); return 0;2、修改MainFrm.cpp OnCreate方法最后加入如下代碼CString str;str.LoadString(ID_VIEW_NAV);if (!m_Nav.C

22、reate(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"); return FALSE; / failed to createm_Nav.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Nav);/ ID_V

23、IEW_NAV是自定義的字符串資源CDockablePane同CFormView類的聯(lián)合使用方法1、CFormView簡(jiǎn)介 MFC提供了一個(gè)名為CFormView的特殊視圖類,我們稱其為表單視圖表單視圖是指用控件來輸入和輸出數(shù)據(jù)的視圖,用戶可以方便地在表單視圖中使用控件表單視圖具有對(duì)話框和滾動(dòng)視圖的特性,它使程序看起來象是一個(gè)具有滾動(dòng)條的對(duì)話框在有些情況下,用表單視圖比用普通視圖更符合用戶的需要,例如,在向數(shù)據(jù)庫輸入數(shù)據(jù)時(shí),顯然用表單的形式可以更習(xí)慣些。用AppWizard可以方便地創(chuàng)建基于表單視圖的應(yīng)用程序,只要在MFC AppWizard對(duì)話框的第六步先選擇CView,然后在Base cl

24、ass欄中選擇CFormView,AppWizard就會(huì)創(chuàng)建一個(gè)基于CFormView的應(yīng)用程序 讀者可以按上述方法建立一個(gè)名為Test的應(yīng)用程序在Test工程的資源中,讀者會(huì)發(fā)現(xiàn)一個(gè)ID為IDD_TEST_FORM的對(duì)話框模板,該對(duì)話框模板可供用戶放置和安排控件在程序運(yùn)行時(shí),框架根據(jù)該對(duì)話框模板創(chuàng)建CFormView對(duì)象,并根據(jù)模板的信息在表單視圖中自動(dòng)創(chuàng)建控件與設(shè)計(jì)對(duì)話框類相類似,用戶可以用ClassWizard為表單視圖類加入與控件對(duì)應(yīng)的成員變量,可以調(diào)用UpdateData在控件和成員變量之間交換數(shù)據(jù),但對(duì)控件的初始化工作是在OnInitialUpdate函數(shù)而不是在OnInitDia

25、log函數(shù)中進(jìn)行的。 基于表單視圖的應(yīng)用程序與基于對(duì)話框的應(yīng)用程序都是在應(yīng)用程序中直接使用控件,但二者有很多不同之處基于對(duì)話框的應(yīng)用程序是用一個(gè)對(duì)話框來作為程序的主窗口的,因而程序的主窗口的特性與對(duì)話框類似,如窗口的大小不能改變,程序沒有菜單條、工具條和狀態(tài)欄等?;诒韱我晥D的應(yīng)用程序仍然是基于Doc/View框架結(jié)構(gòu)的,只是視圖被換成了表單視圖,也就是說,應(yīng)用程序的窗口可以改變大小,程序有菜單條、工具條和狀態(tài)欄,且程序仍然可以Dov/View運(yùn)行機(jī)制來處理文檔。2、添加CDockablePane的派生類CDock,形式同前述。3、添加CFormView的派生類。利用類向?qū)?,添加一個(gè)基類為CF

26、ormView的類CFrmView。 為CFrmView分別重載Create函數(shù)和OnMouseActivate函數(shù),前者是為了把Create函數(shù)重載為public,一行代碼都不用寫,后者是為了防止CDockablePane處于懸浮狀態(tài)時(shí)程序崩潰(不重載必然崩潰?。﹊nt CFrmView:OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)/ TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值int nResult = 0;CFrameWnd* pParentFrame = GetParentFrame();if(

27、pParentFrame = pDesktopWnd )/ When this is dockednResult= CFormView:OnMouseActivate(pDesktopWnd, nHitTest, message);else/ When this is not dockedBOOL isMiniFrameWnd = pDesktopWnd->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd);BOOL isPaneFrameWnd = pDesktopWnd->IsKindOf(RUNTIME_CLASS(CPaneFrameWnd);BOO

28、L isMultiPaneFrameWnd = pDesktopWnd->IsKindOf(RUNTIME_CLASS(CMultiPaneFrameWnd);/ pDesktopWnd is the frame window for CDockablePanenResult = CWnd:OnMouseActivate( pDesktopWnd, nHitTest, message );return nResult;4、向CDockablePane裝東西 在Dock.h添加protected類型的指針:CFrmView *m_frmview 在構(gòu)造函數(shù)中添加m_frmview = (C

29、FrmView*)(RUNTIME_CLASS(CFrmView)->CreateObject(); 重載OnCreate函數(shù)和OnSize函數(shù),前者是為初始化,后者是為設(shè)置frmview在dock中的顯示大小,一般填充滿。int CDock:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CDockablePane:OnCreate(lpCreateStruct) = -1)return -1;/ TODO: 在此添加您專用的創(chuàng)建代碼RECT rect;GetClientRect(&rect);m_frmview->Create(NU

30、LL, NULL, WS_CHILD|WS_VISIBLE, rect, this, 0, NULL);return 0;void CDock:OnSize(UINT nType, int cx, int cy)CDockablePane:OnSize(nType, cx, cy);/ TODO: 在此處添加消息處理程序代碼if (GetSafeHwnd() = NULL)return;if(m_frmview->GetSafeHwnd()!=NULL)CRect rect;GetClientRect(rect);m_frmview->SetWindowPos(NULL, rect

31、.left, rect.top, rect.Width(), rect.Height(), SWP_NOACTIVATE | SWP_NOZORDER);兩個(gè)帶圖標(biāo)的CDockablePane派生類與CFormView類的聯(lián)合使用方法1、利用類向?qū)В砑觾蓚€(gè)基類為CDockablePane的類CDock1,CDock2。2、在MainFrm.h中添加Dock1.h和Dock2.h的頭文件;并派生兩個(gè)子類protected:CDock1 m_dock1;CDock2 m_dock2;CDockablePane* m_pTabbedBar;3、在MainFrm的OnCreate()里面添加:(最好

32、接著EnableAutoHidePanes(CBRS_ALIGN_ANY);這句后面添加)if(!m_dock1.Create("Dock1",this,CRect(0,0,300,300),true,IDD_FRMVIEW,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)TRACE0("Failed to create dock1 windown");return FALSE;if(!m_dock2.Create("

33、;Dock2",this,CRect(0,0,300,300),true,IDD_FRMVIEW1,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)TRACE0("Failed to create dock2 windown");return FALSE;BOOL bHiColorIcons=TRUE; /下面這幾句用于添加標(biāo)簽的圖標(biāo),IDR_SHJKTYPE 為圖標(biāo)IDHICON hdock1=(HICON) :LoadImage(:

34、AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDR_SHJKTYPE : IDR_SHJKTYPE), IMAGE_ICON, :GetSystemMetrics(SM_CXSMICON), :GetSystemMetrics(SM_CYSMICON), 0);m_dock1.SetIcon(hdock1, FALSE);HICON hdock2=(HICON) :LoadImage(:AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDR_SHJKTYPE :

35、IDR_SHJKTYPE), IMAGE_ICON, :GetSystemMetrics(SM_CXSMICON), :GetSystemMetrics(SM_CYSMICON), 0);m_dock2.SetIcon(hdock2, FALSE);m_dock1.EnableDocking(CBRS_ALIGN_ANY); /設(shè)置可??浚珹NY還可替換成NOALIGN,LEFT,RIGHT,TOP,BOTTOM等m_dock2.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_dock1);DockPane(&m_dock2);m_pTabb

36、edBar = NULL;/將兩個(gè)dock合成一個(gè)窗口,二者通過標(biāo)簽切換m_dock1.AttachToTabWnd(&m_dock2, DM_SHOW, FALSE, &m_pTabbedBar);2、寫CFormView類 利用類向?qū)?,添加兩個(gè)基類為CFormView的類CFrmView,CFrmView1; 為CFrmView和CFrmView1分別重載Create函數(shù)和OnMouseActivate函數(shù),前者是為了把Create函數(shù)重載為public,一行代碼都不用寫,后者是為了防止CDockablePane處于懸浮狀態(tài)時(shí)程序崩潰(不重載必然崩潰?。﹊nt CFrmVi

37、ew:OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)/ TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值int nResult = 0;CFrameWnd* pParentFrame = GetParentFrame();if( pParentFrame = pDesktopWnd )/ When this is dockednResult = CFormView:OnMouseActivate(pDesktopWnd, nHitTest, message);else/ When this is not doc

38、kedBOOL isMiniFrameWnd = pDesktopWnd->IsKindOf( RUNTIME_CLASS( CMiniFrameWnd ) );BOOL isPaneFrameWnd = pDesktopWnd->IsKindOf( RUNTIME_CLASS( CPaneFrameWnd ) );BOOL isMultiPaneFrameWnd = pDesktopWnd->IsKindOf( RUNTIME_CLASS( CMultiPaneFrameWnd ) );/ pDesktopWnd is the frame window for CDocka

39、blePanenResult = CWnd:OnMouseActivate( pDesktopWnd, nHitTest, message );/return CFormView:OnMouseActivate(pDesktopWnd, nHitTest, message);return nResult;3、向CDockablePane裝東西 在Dock1.h和Dock2.h中添加protected類型的指針:CFrmView *m_frmview; (Dock1.h)CFrmView1 *m_frmview; (Dock2.h) 接下來以Dock1.cpp為例說,Dock2.cpp一樣,但是

40、注意指針別指重了,在構(gòu)造函數(shù)中添加m_frmview = (CFrmView*)(RUNTIME_CLASS(CFrmView)->CreateObject(); 重載OnCreate函數(shù)和OnSize函數(shù),前者是為初始化,后者是為設(shè)置frmview在dock中的顯示大小,一般填充滿int CDock1:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CDockablePane:OnCreate(lpCreateStruct) = -1)return -1;/ TODO: 在此添加您專用的創(chuàng)建代碼RECT rect;GetClientRect(&am

41、p;rect);m_frmview->Create(NULL, NULL, WS_CHILD|WS_VISIBLE, rect, this, 0, NULL);return 0;void CDock1:OnSize(UINT nType, int cx, int cy)CDockablePane:OnSize(nType, cx, cy);/ TODO: 在此處添加消息處理程序代碼if (GetSafeHwnd() = NULL)return;if(m_frmview->GetSafeHwnd()!=NULL)CRect rect;GetClientRect(rect);m_frm

42、view->SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOACTIVATE | SWP_NOZORDER);CDockablePane類的布局設(shè)計(jì)1. CFrameWndEx 在框架類的頭文件中定義一個(gè)CDockablePane的數(shù)組CDockablePane m_Panes5;/ 一個(gè)CDockablePane的數(shù)組2. CFrameWndEx: OnCreate() 在Create函數(shù)中自動(dòng)生成了以下代碼,對(duì)MFC比較熟悉的這里就不講了CMFCPopupMenu:SetForceM

43、enuFocus(FALSE);InitUserToolbars(NULL, uiFirstUserToolBarId, uiLastUserToolBarId);EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, 0, ID_VIEW_TOOLBAR);CDockingManager:SetDockingMode(DT_SMART);EnableAutoHidePanes(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY); 第一種情況if (!m_Panes0.Create(_T("Pane 0"),

44、this, CRect(0, 0, 200, 100), TRUE, 1000,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)return FALSE;m_Panes0.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes0);/ LEFT 第二種情況if (!m_Panes0.Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000

45、,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)return FALSE;if (!m_Panes1.Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)return FALSE;m_Panes0.E

46、nableDocking(CBRS_ALIGN_ANY);m_Panes1.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes1);/ BOTTOM先后順序決定誰占主導(dǎo)DockPane(&m_Panes0);/ LEFT 第三種情況if (!m_Panes0.Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT

47、| CBRS_FLOAT_MULTI)return FALSE;if (!m_Panes1.Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)return FALSE;m_Panes0.EnableDocking(CBRS_ALIGN_ANY);m_Panes1.EnableDocking(CBRS_ALIGN_ANY);Do

48、ckPane(&m_Panes0);/ LEFT先后順序決定誰占主導(dǎo)DockPane(&m_Panes1);/ BOTTOM 第四種情況if (!m_Panes0.Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)return FALSE;if (!m_Panes1.Create(_T("Pane 1&q

49、uot;), this, CRect(0, 0, 200, 100), TRUE, 1001,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)return FALSE;m_Panes0.EnableDocking(CBRS_ALIGN_ANY);m_Panes1.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes0);/ LEFTDockPane(&m_Panes1);/ LEFT/ 注意這里,將0放在1上面

50、m_Panes0.DockToWindow(&m_Panes1, CBRS_TOP); 第五種情況if (!m_Panes0.Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)return FALSE;if (!m_Panes1.Create(_T("Pane 1"), this, CRect(0, 0

51、, 200, 100), TRUE, 1001,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)return FALSE;m_Panes0.EnableDocking(CBRS_ALIGN_ANY);m_Panes1.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes0);/ LEFTDockPane(&m_Panes1);/ LEFTCDockablePane* pTabbedBar = NULL;/ 放到

52、同一個(gè)選項(xiàng)卡中,并默認(rèn)選擇1m_Panes1.AttachToTabWnd(&m_Panes0, DM_SHOW, TRUE, &pTabbedBar); 第六種情況if (!m_Panes0.Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)return FALSE;if (!m_Panes1.Create(_T

53、("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)return FALSE;if (!m_Panes2.Create(_T("Pane 2"), this, CRect(0, 0, 200, 100), TRUE, 1002,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHIL

54、DREN | CBRS_LEFT | CBRS_FLOAT_MULTI)return FALSE;m_Panes0.EnableDocking(CBRS_ALIGN_ANY);m_Panes1.EnableDocking(CBRS_ALIGN_ANY);m_Panes2.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes0);/ LEFTDockPane(&m_Panes1);/ LEFTDockPane(&m_Panes2);/ LEFTm_Panes0.DockToWindow(&m_Panes2, CBRS_TO

55、P);CDockablePane* pTabbedBar = NULL;m_Panes1.AttachToTabWnd(&m_Panes0, DM_SHOW, TRUE, &pTabbedBar); 第七種情況if (!m_Panes0.Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)return FALSE

56、;if (!m_Panes1.Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)return FALSE;m_Panes0.EnableDocking(CBRS_ALIGN_ANY);m_Panes1.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes0);/ BOTTOMDockPane(&m_Panes1);/ BOTTOMCDockablePane* pTabbedBar = NULL;m_Panes0.DockToWindow(&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論