![CDockablePane類的使用.doc_第1頁](http://file1.renrendoc.com/fileroot_temp2/2020-3/1/5f3e1185-1e44-4fc0-9e3a-78a814ed0172/5f3e1185-1e44-4fc0-9e3a-78a814ed01721.gif)
![CDockablePane類的使用.doc_第2頁](http://file1.renrendoc.com/fileroot_temp2/2020-3/1/5f3e1185-1e44-4fc0-9e3a-78a814ed0172/5f3e1185-1e44-4fc0-9e3a-78a814ed01722.gif)
![CDockablePane類的使用.doc_第3頁](http://file1.renrendoc.com/fileroot_temp2/2020-3/1/5f3e1185-1e44-4fc0-9e3a-78a814ed0172/5f3e1185-1e44-4fc0-9e3a-78a814ed01723.gif)
![CDockablePane類的使用.doc_第4頁](http://file1.renrendoc.com/fileroot_temp2/2020-3/1/5f3e1185-1e44-4fc0-9e3a-78a814ed0172/5f3e1185-1e44-4fc0-9e3a-78a814ed01724.gif)
![CDockablePane類的使用.doc_第5頁](http://file1.renrendoc.com/fileroot_temp2/2020-3/1/5f3e1185-1e44-4fc0-9e3a-78a814ed0172/5f3e1185-1e44-4fc0-9e3a-78a814ed01725.gif)
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
CDockablePane類的使用目錄CDockablePane與對話框類聯(lián)合使用方法2CDockablePane與CTreeCtrl類聯(lián)合使用的方法6CDockablePane同CFormView類的聯(lián)合使用方法9兩個帶圖標的CDockablePane派生類與CFormView類的聯(lián)合使用方法12CDockablePane類的布局設計15CDockablePane窗口風格設置22去除VS2010風格的框架菜單23在View視圖類中使用CSplitterWnd來拆分視圖窗口(不在CMainFrame類的虛函數(shù)OnCreateClient中拆分視圖框架窗口)24禁止dockablepane??扛油蟿?6VS2010菜單修改不了問題27VS2010 DockablePane 每次打開都自動隱藏29EnableDocking函數(shù)解釋30CDockablePane與對話框類聯(lián)合使用方法1、新建對話框資源: 新建一個對話框資源IDD_DIALOG_DOCKDLG,Style設為Child,Border設為None; 把默認的OK和Cancel按鍵去掉,因為一般情況下點擊這兩個按鈕后,對話框會銷毀,而這里是不需要銷毀的(如果沒去掉點擊了,懸浮框中的對話框內(nèi)容就不能用了); 如下添加一個按鈕IDC_BUTTON_TEST,后為對話框添加類CTestDlg; 為按鈕添加響應void CTestDlg:OnBnClickedButtonTest() / TODO: Add your control notification handler code here MessageBox(_T(Hello World!);2、派生CDockablePane類 添加繼承自CDockablePane的類CMyPane 添加此類的WM_CREATE和WM_SIZE消息響應,并添加上面對話框的成員變量CTestDlg m_TestDlg; 在CMyPane:OnCreate和CMyPane:OnSize函數(shù)中添加代碼int CMyPane:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CDockablePane:OnCreate(lpCreateStruct) = -1) return -1; / TODO: Add your specialized creation code here CRect rectDummy; rectDummy.SetRectEmpty(); / 創(chuàng)建選項卡窗口: if (!m_TestDlg.Create(IDD_DIALOG_DOCKDLG,this) TRACE0(未能創(chuàng)建輸出選項卡窗口/n); return -1; / 未能創(chuàng)建 m_TestDlg.ShowWindow(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 / 選項卡控件應覆蓋整個工作區(qū) m_TestDlg.SetWindowPos (this, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER); m_TestDlg.ShowWindow(SW_SHOW);3、修改MainFrame類 然后在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), this, 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 dont want the toolbar and menubar 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); / 調整m_MyPane的大小使之適合父窗口4、運行結果5、補充 CDockablePane派生類銷毀時,對話框也銷毀掉(沒有試驗) void ControlPanel:OnDestroy() CDockablePane:OnDestroy(); / TODO: Add your message handler code here m_dlg.DestroyWindow(); CDockablePane派生類對象的Create函數(shù)里面的666是這個??繖诘腎D,這里是隨便指定的一個數(shù)值,只要不和其他已用資源重復即可,真正應用的時候,以在字符串表中添加一個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類聯(lián)合使用的方法1、從CDockablePane繼承,創(chuàng)建一個自定義類CNavView CNavView.h的代碼#pragma once/ CNavViewclass CNavView : public CDockablePane DECLARE_DYNAMIC(CNavView)public: CNavView(); virtual CNavView();protected: afx_msg int 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 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();void 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);/ CNavView 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(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(hRoot, TVIS_BOLD, TVIS_BOLD); HTREEITEM hClass = m_wndClassView.InsertItem(_T(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_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(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.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(CFakeAppFrame(), 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), 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.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); return FALSE; / failed to createm_Nav.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Nav);/ ID_VIEW_NAV是自定義的字符串資源CDockablePane同CFormView類的聯(lián)合使用方法1、CFormView簡介 MFC提供了一個名為CFormView的特殊視圖類,我們稱其為表單視圖表單視圖是指用控件來輸入和輸出數(shù)據(jù)的視圖,用戶可以方便地在表單視圖中使用控件表單視圖具有對話框和滾動視圖的特性,它使程序看起來象是一個具有滾動條的對話框在有些情況下,用表單視圖比用普通視圖更符合用戶的需要,例如,在向數(shù)據(jù)庫輸入數(shù)據(jù)時,顯然用表單的形式可以更習慣些。用AppWizard可以方便地創(chuàng)建基于表單視圖的應用程序,只要在MFC AppWizard對話框的第六步先選擇CView,然后在Base class欄中選擇CFormView,AppWizard就會創(chuàng)建一個基于CFormView的應用程序 讀者可以按上述方法建立一個名為Test的應用程序在Test工程的資源中,讀者會發(fā)現(xiàn)一個ID為IDD_TEST_FORM的對話框模板,該對話框模板可供用戶放置和安排控件在程序運行時,框架根據(jù)該對話框模板創(chuàng)建CFormView對象,并根據(jù)模板的信息在表單視圖中自動創(chuàng)建控件與設計對話框類相類似,用戶可以用ClassWizard為表單視圖類加入與控件對應的成員變量,可以調用UpdateData在控件和成員變量之間交換數(shù)據(jù),但對控件的初始化工作是在OnInitialUpdate函數(shù)而不是在OnInitDialog函數(shù)中進行的。 基于表單視圖的應用程序與基于對話框的應用程序都是在應用程序中直接使用控件,但二者有很多不同之處基于對話框的應用程序是用一個對話框來作為程序的主窗口的,因而程序的主窗口的特性與對話框類似,如窗口的大小不能改變,程序沒有菜單條、工具條和狀態(tài)欄等?;诒韱我晥D的應用程序仍然是基于Doc/View框架結構的,只是視圖被換成了表單視圖,也就是說,應用程序的窗口可以改變大小,程序有菜單條、工具條和狀態(tài)欄,且程序仍然可以Dov/View運行機制來處理文檔。2、添加CDockablePane的派生類CDock,形式同前述。3、添加CFormView的派生類。利用類向導,添加一個基類為CFormView的類CFrmView。 為CFrmView分別重載Create函數(shù)和OnMouseActivate函數(shù),前者是為了把Create函數(shù)重載為public,一行代碼都不用寫,后者是為了防止CDockablePane處于懸浮狀態(tài)時程序崩潰(不重載必然崩潰!)int CFrmView:OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)/ TODO: 在此添加消息處理程序代碼和/或調用默認值int nResult = 0;CFrameWnd* pParentFrame = GetParentFrame();if( 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);BOOL 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 在構造函數(shù)中添加m_frmview = (CFrmView*)(RUNTIME_CLASS(CFrmView)-CreateObject(); 重載OnCreate函數(shù)和OnSize函數(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(NULL, 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.left, rect.top, rect.Width(), rect.Height(), SWP_NOACTIVATE | SWP_NOZORDER);兩個帶圖標的CDockablePane派生類與CFormView類的聯(lián)合使用方法1、利用類向導,添加兩個基類為CDockablePane的類CDock1,CDock2。2、在MainFrm.h中添加Dock1.h和Dock2.h的頭文件;并派生兩個子類protected:CDock1 m_dock1;CDock2 m_dock2;CDockablePane* m_pTabbedBar;3、在MainFrm的OnCreate()里面添加:(最好接著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(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; /下面這幾句用于添加標簽的圖標,IDR_SHJKTYPE 為圖標IDHICON hdock1=(HICON) :LoadImage(: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 : IDR_SHJKTYPE), IMAGE_ICON, :GetSystemMetrics(SM_CXSMICON), :GetSystemMetrics(SM_CYSMICON), 0);m_dock2.SetIcon(hdock2, FALSE);m_dock1.EnableDocking(CBRS_ALIGN_ANY); /設置可??浚珹NY還可替換成NOALIGN,LEFT,RIGHT,TOP,BOTTOM等m_dock2.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_dock1);DockPane(&m_dock2);m_pTabbedBar = NULL;/將兩個dock合成一個窗口,二者通過標簽切換m_dock1.AttachToTabWnd(&m_dock2, DM_SHOW, FALSE, &m_pTabbedBar);2、寫CFormView類 利用類向導,添加兩個基類為CFormView的類CFrmView,CFrmView1; 為CFrmView和CFrmView1分別重載Create函數(shù)和OnMouseActivate函數(shù),前者是為了把Create函數(shù)重載為public,一行代碼都不用寫,后者是為了防止CDockablePane處于懸浮狀態(tài)時程序崩潰(不重載必然崩潰!)int CFrmView:OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)/ TODO: 在此添加消息處理程序代碼和/或調用默認值int nResult = 0;CFrameWnd* pParentFrame = GetParentFrame();if( 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 ) );BOOL isMultiPaneFrameWnd = pDesktopWnd-IsKindOf( RUNTIME_CLASS( CMultiPaneFrameWnd ) );/ pDesktopWnd is the frame window for CDockablePanenResult = 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一樣,但是注意指針別指重了,在構造函數(shù)中添加m_frmview = (CFrmView*)(RUNTIME_CLASS(CFrmView)-CreateObject(); 重載OnCreate函數(shù)和OnSize函數(shù),前者是為初始化,后者是為設置frmview在dock中的顯示大小,一般填充滿int CDock1:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CDockablePane:OnCreate(lpCreateStruct) = -1)return -1;/ TODO: 在此添加您專用的創(chuàng)建代碼RECT rect;GetClientRect(&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_frmview-SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOACTIVATE | SWP_NOZORDER);CDockablePane類的布局設計1. CFrameWndEx 在框架類的頭文件中定義一個CDockablePane的數(shù)組CDockablePane m_Panes5;/ 一個CDockablePane的數(shù)組2. CFrameWndEx: OnCreate() 在Create函數(shù)中自動生成了以下代碼,對MFC比較熟悉的這里就不講了CMFCPopupMenu:SetForceMenuFocus(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), 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,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.EnableDocking(CBRS_ALIGN_ANY);m_Panes1.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes1);/ BOTTOM先后順序決定誰占主導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 | 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);DockPane(&m_Panes0);/ LEFT先后順序決定誰占主導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), 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上面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, 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;/ 放到同一個選項卡中,并默認選擇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(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_CLIPCHILDREN | 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_TOP);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;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 = NU
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44808.2-2024人類工效學無障礙設計第2部分:考慮顏色視覺隨年齡變化的顏色組合方法
- Ginisortamab-Mouse-IgG1-生命科學試劑-MCE-5731
- CDDP-PEG-Cy3-生命科學試劑-MCE-6481
- 20-Hydroxylucidenic-acid-E2-生命科學試劑-MCE-8519
- 2-Dodecylfuran-生命科學試劑-MCE-5142
- 二零二五年度綠色建筑物業(yè)費減免執(zhí)行合同
- 二零二五年度校園教師聘用與管理合作協(xié)議
- 二零二五年度股權贈與合同:公司股東權益轉移與公司股權結構調整
- 2025年度籃球運動員與俱樂部傷病賠償合同
- 2025年度影視基地裝修半包工程合同
- 人教版數(shù)學六年級下冊全冊核心素養(yǎng)目標教學設計
- 構建綠色低碳的城市生態(tài)系統(tǒng)
- 春節(jié)習俗中的傳統(tǒng)節(jié)日服飾與裝扮
- 兒童編程課件
- (完整word版)英語四級單詞大全
- 武裝押運操作規(guī)程完整
- 混合動力汽車構造與檢修(高職新能源汽車專業(yè))PPT完整全套教學課件
- 薪酬專員崗位月度KPI績效考核表
- 技能大賽題庫(空分)
- 污水處理廠設備的操作規(guī)程(完整版)
- GB/T 28419-2012風沙源區(qū)草原沙化遙感監(jiān)測技術導則
評論
0/150
提交評論