![CDockablePane類(lèi)的使用.doc_第1頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/1/5f3e1185-1e44-4fc0-9e3a-78a814ed0172/5f3e1185-1e44-4fc0-9e3a-78a814ed01721.gif)
![CDockablePane類(lèi)的使用.doc_第2頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/1/5f3e1185-1e44-4fc0-9e3a-78a814ed0172/5f3e1185-1e44-4fc0-9e3a-78a814ed01722.gif)
![CDockablePane類(lèi)的使用.doc_第3頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/1/5f3e1185-1e44-4fc0-9e3a-78a814ed0172/5f3e1185-1e44-4fc0-9e3a-78a814ed01723.gif)
![CDockablePane類(lèi)的使用.doc_第4頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/1/5f3e1185-1e44-4fc0-9e3a-78a814ed0172/5f3e1185-1e44-4fc0-9e3a-78a814ed01724.gif)
![CDockablePane類(lèi)的使用.doc_第5頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/1/5f3e1185-1e44-4fc0-9e3a-78a814ed0172/5f3e1185-1e44-4fc0-9e3a-78a814ed01725.gif)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
CDockablePane類(lèi)的使用目錄CDockablePane與對(duì)話(huà)框類(lèi)聯(lián)合使用方法2CDockablePane與CTreeCtrl類(lèi)聯(lián)合使用的方法6CDockablePane同CFormView類(lèi)的聯(lián)合使用方法9兩個(gè)帶圖標(biāo)的CDockablePane派生類(lèi)與CFormView類(lèi)的聯(lián)合使用方法12CDockablePane類(lèi)的布局設(shè)計(jì)15CDockablePane窗口風(fēng)格設(shè)置22去除VS2010風(fēng)格的框架菜單23在View視圖類(lèi)中使用CSplitterWnd來(lái)拆分視圖窗口(不在CMainFrame類(lèi)的虛函數(shù)OnCreateClient中拆分視圖框架窗口)24禁止dockablepane??扛?dòng)拖動(dòng)26VS2010菜單修改不了問(wèn)題27VS2010 DockablePane 每次打開(kāi)都自動(dòng)隱藏29EnableDocking函數(shù)解釋30CDockablePane與對(duì)話(huà)框類(lèi)聯(lián)合使用方法1、新建對(duì)話(huà)框資源: 新建一個(gè)對(duì)話(huà)框資源IDD_DIALOG_DOCKDLG,Style設(shè)為Child,Border設(shè)為None; 把默認(rèn)的OK和Cancel按鍵去掉,因?yàn)橐话闱闆r下點(diǎn)擊這兩個(gè)按鈕后,對(duì)話(huà)框會(huì)銷(xiāo)毀,而這里是不需要銷(xiāo)毀的(如果沒(méi)去掉點(diǎn)擊了,懸浮框中的對(duì)話(huà)框內(nèi)容就不能用了); 如下添加一個(gè)按鈕IDC_BUTTON_TEST,后為對(duì)話(huà)框添加類(lèi)CTestDlg; 為按鈕添加響應(yīng)void CTestDlg:OnBnClickedButtonTest() / TODO: Add your control notification handler code here MessageBox(_T(Hello World!);2、派生CDockablePane類(lèi) 添加繼承自CDockablePane的類(lèi)CMyPane 添加此類(lèi)的WM_CREATE和WM_SIZE消息響應(yīng),并添加上面對(duì)話(huà)框的成員變量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)建選項(xiàng)卡窗口: if (!m_TestDlg.Create(IDD_DIALOG_DOCKDLG,this) TRACE0(未能創(chuàng)建輸出選項(xià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 / 選項(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、修改MainFrame類(lèi) 然后在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); / 調(diào)整m_MyPane的大小使之適合父窗口4、運(yùn)行結(jié)果5、補(bǔ)充 CDockablePane派生類(lèi)銷(xiāo)毀時(shí),對(duì)話(huà)框也銷(xiāo)毀掉(沒(méi)有試驗(yàn)) void ControlPanel:OnDestroy() CDockablePane:OnDestroy(); / TODO: Add your message handler code here m_dlg.DestroyWindow(); CDockablePane派生類(lèi)對(duì)象的Create函數(shù)里面的666是這個(gè)??繖诘腎D,這里是隨便指定的一個(gè)數(shù)值,只要不和其他已用資源重復(fù)即可,真正應(yīng)用的時(shí)候,以在字符串表中添加一個(gè)ID,前面使用的是對(duì)話(huà)框的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類(lèi)聯(lián)合使用的方法1、從CDockablePane繼承,創(chuàng)建一個(gè)自定義類(lèi)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類(lèi)的聯(lián)合使用方法1、CFormView簡(jiǎn)介 MFC提供了一個(gè)名為CFormView的特殊視圖類(lèi),我們稱(chēng)其為表單視圖表單視圖是指用控件來(lái)輸入和輸出數(shù)據(jù)的視圖,用戶(hù)可以方便地在表單視圖中使用控件表單視圖具有對(duì)話(huà)框和滾動(dòng)視圖的特性,它使程序看起來(lái)象是一個(gè)具有滾動(dòng)條的對(duì)話(huà)框在有些情況下,用表單視圖比用普通視圖更符合用戶(hù)的需要,例如,在向數(shù)據(jù)庫(kù)輸入數(shù)據(jù)時(shí),顯然用表單的形式可以更習(xí)慣些。用AppWizard可以方便地創(chuàng)建基于表單視圖的應(yīng)用程序,只要在MFC AppWizard對(duì)話(huà)框的第六步先選擇CView,然后在Base class欄中選擇CFormView,AppWizard就會(huì)創(chuàng)建一個(gè)基于CFormView的應(yīng)用程序 讀者可以按上述方法建立一個(gè)名為T(mén)est的應(yīng)用程序在Test工程的資源中,讀者會(huì)發(fā)現(xiàn)一個(gè)ID為IDD_TEST_FORM的對(duì)話(huà)框模板,該對(duì)話(huà)框模板可供用戶(hù)放置和安排控件在程序運(yùn)行時(shí),框架根據(jù)該對(duì)話(huà)框模板創(chuàng)建CFormView對(duì)象,并根據(jù)模板的信息在表單視圖中自動(dòng)創(chuàng)建控件與設(shè)計(jì)對(duì)話(huà)框類(lèi)相類(lèi)似,用戶(hù)可以用ClassWizard為表單視圖類(lèi)加入與控件對(duì)應(yīng)的成員變量,可以調(diào)用UpdateData在控件和成員變量之間交換數(shù)據(jù),但對(duì)控件的初始化工作是在OnInitialUpdate函數(shù)而不是在OnInitDialog函數(shù)中進(jìn)行的。 基于表單視圖的應(yīng)用程序與基于對(duì)話(huà)框的應(yīng)用程序都是在應(yīng)用程序中直接使用控件,但二者有很多不同之處基于對(duì)話(huà)框的應(yīng)用程序是用一個(gè)對(duì)話(huà)框來(lái)作為程序的主窗口的,因而程序的主窗口的特性與對(duì)話(huà)框類(lèi)似,如窗口的大小不能改變,程序沒(méi)有菜單條、工具條和狀態(tài)欄等。基于表單視圖的應(yīng)用程序仍然是基于Doc/View框架結(jié)構(gòu)的,只是視圖被換成了表單視圖,也就是說(shuō),應(yīng)用程序的窗口可以改變大小,程序有菜單條、工具條和狀態(tài)欄,且程序仍然可以Dov/View運(yùn)行機(jī)制來(lái)處理文檔。2、添加CDockablePane的派生類(lèi)CDock,形式同前述。3、添加CFormView的派生類(lèi)。利用類(lèi)向?qū)В砑右粋€(gè)基類(lèi)為CFormView的類(lèi)CFrmView。 為CFrmView分別重載Create函數(shù)和OnMouseActivate函數(shù),前者是為了把Create函數(shù)重載為public,一行代碼都不用寫(xiě),后者是為了防止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( 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類(lèi)型的指針:CFrmView *m_frmview 在構(gòu)造函數(shù)中添加m_frmview = (CFrmView*)(RUNTIME_CLASS(CFrmView)-CreateObject(); 重載OnCreate函數(shù)和OnSize函數(shù),前者是為初始化,后者是為設(shè)置frmview在dock中的顯示大小,一般填充滿(mǎn)。int CDock:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CDockablePane:OnCreate(lpCreateStruct) = -1)return -1;/ TODO: 在此添加您專(zhuān)用的創(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);兩個(gè)帶圖標(biāo)的CDockablePane派生類(lèi)與CFormView類(lèi)的聯(lián)合使用方法1、利用類(lèi)向?qū)?,添加兩個(gè)基類(lèi)為CDockablePane的類(lèi)CDock1,CDock2。2、在MainFrm.h中添加Dock1.h和Dock2.h的頭文件;并派生兩個(gè)子類(lèi)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; /下面這幾句用于添加標(biāo)簽的圖標(biāo),IDR_SHJKTYPE 為圖標(biāo)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); /設(shè)置可??浚珹NY還可替換成NOALIGN,LEFT,RIGHT,TOP,BOTTOM等m_dock2.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_dock1);DockPane(&m_dock2);m_pTabbedBar = NULL;/將兩個(gè)dock合成一個(gè)窗口,二者通過(guò)標(biāo)簽切換m_dock1.AttachToTabWnd(&m_dock2, DM_SHOW, FALSE, &m_pTabbedBar);2、寫(xiě)CFormView類(lèi) 利用類(lèi)向?qū)?,添加兩個(gè)基類(lèi)為CFormView的類(lèi)CFrmView,CFrmView1; 為CFrmView和CFrmView1分別重載Create函數(shù)和OnMouseActivate函數(shù),前者是為了把Create函數(shù)重載為public,一行代碼都不用寫(xiě),后者是為了防止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( 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類(lèi)型的指針:CFrmView *m_frmview; (Dock1.h)CFrmView1 *m_frmview; (Dock2.h) 接下來(lái)以Dock1.cpp為例說(shuō),Dock2.cpp一樣,但是注意指針別指重了,在構(gòu)造函數(shù)中添加m_frmview = (CFrmView*)(RUNTIME_CLASS(CFrmView)-CreateObject(); 重載OnCreate函數(shù)和OnSize函數(shù),前者是為初始化,后者是為設(shè)置frmview在dock中的顯示大小,一般填充滿(mǎn)int CDock1:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CDockablePane:OnCreate(lpCreateStruct) = -1)return -1;/ TODO: 在此添加您專(zhuān)用的創(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類(lèi)的布局設(shè)計(jì)1. CFrameWndEx 在框架類(lèi)的頭文件中定義一個(gè)CDockablePane的數(shù)組CDockablePane m_Panes5;/ 一個(gè)CDockablePane的數(shù)組2. CFrameWndEx: OnCreate() 在Create函數(shù)中自動(dòng)生成了以下代碼,對(duì)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先后順序決定誰(shuí)占主導(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 | 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先后順序決定誰(shuí)占主導(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), 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;/ 放到同一個(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(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人教育貸款擔(dān)保合同細(xì)則
- 個(gè)人創(chuàng)業(yè)借款合同模板
- 上海市房產(chǎn)交易中介合同
- 一次性鋼筋采購(gòu)合同實(shí)例
- 二手車(chē)交易合同協(xié)議書(shū)
- 中小企業(yè)勞動(dòng)合同管理規(guī)定及合同范本
- 買(mǎi)賣(mài)合同違約責(zé)任訴訟時(shí)效規(guī)定
- 專(zhuān)利使用權(quán)買(mǎi)賣(mài)合同
- 二手房銷(xiāo)售合同標(biāo)準(zhǔn)文本
- 個(gè)人與公司汽車(chē)租賃合同范本
- 設(shè)備維保的維修流程與服務(wù)流程
- 技術(shù)交易系統(tǒng)的新概念
- 人教版數(shù)學(xué)六年級(jí)下冊(cè)全冊(cè)核心素養(yǎng)目標(biāo)教學(xué)設(shè)計(jì)
- 構(gòu)建綠色低碳的城市生態(tài)系統(tǒng)
- 春節(jié)習(xí)俗中的傳統(tǒng)節(jié)日服飾與裝扮
- 兒童編程課件
- (完整word版)英語(yǔ)四級(jí)單詞大全
- 武裝押運(yùn)操作規(guī)程完整
- 混合動(dòng)力汽車(chē)構(gòu)造與檢修(高職新能源汽車(chē)專(zhuān)業(yè))PPT完整全套教學(xué)課件
- 薪酬專(zhuān)員崗位月度KPI績(jī)效考核表
- 技能大賽題庫(kù)(空分)
評(píng)論
0/150
提交評(píng)論