版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、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??扛?/p>
2、動拖動26VS2010菜單修改不了問題27VS2010 DockablePane 每次打開都自動隱藏29EnableDocking函數(shù)解釋30CDockablePane與對話框類聯(lián)合使用方法1、新建對話框資源: 新建一個對話框資源IDD_DIALOG_DOCKDLG,Style設為Child,Border設為None; 把默認的OK和Cancel按鍵去掉,因為一般情況下點擊這兩個按鈕后,對話框會銷毀,而這里是不需要銷毀的(如果沒去掉點擊了,懸浮框中的對話框內(nèi)容就不能用了); 如下添加一個按鈕IDC_BUTTON_TEST,后為對話框添加類CTestDlg; 為按鈕添加響應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消息響應,并添加上面對話框的成員變量CTestDlg m_TestDlg; 在CMyPane:OnCreate和CMyPane:OnSize函數(shù)中添加代碼int CMyPane:OnCreate(LPCREATESTRUCT lpCreat
4、eStruct) 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;v
5、oid 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代碼中添加成員
6、變量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_DOC
7、KDLG, 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_
8、wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_wndMenuBar);DockPane(&m_wndToolBar);DockPane(&m_MyPane); / 調(diào)整m_MyPane的大小使之適合父窗口4、運行結(jié)果5、補充 CDockablePane派生類銷毀時,對話框也銷毀掉(沒有試驗) void ControlPanel:OnDestroy() CDockablePane:OnDestroy(); / TODO: Add your message handler cod
9、e 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與CT
10、reeCtrl類聯(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);
11、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_MA
12、P(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_wnd
13、ClassView.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 vi
14、ews: 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.
15、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_wndClassVie
16、w.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.Inse
17、rtItem(_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_wndClassVie
18、w.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.InsertI
19、tem(_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.Inser
20、tItem(_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_L
21、EFT | 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ù)的視圖,用戶可以方便地在表單視圖中使用控件表單視圖具有
22、對話框和滾動視圖的特性,它使程序看起來象是一個具有滾動條的對話框在有些情況下,用表單視圖比用普通視圖更符合用戶的需要,例如,在向數(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的對話框模板,該對話框模板可供用戶放置和安排控件在程序運行時,框架
23、根據(jù)該對話框模板創(chuàng)建CFormView對象,并根據(jù)模板的信息在表單視圖中自動創(chuàng)建控件與設計對話框類相類似,用戶可以用ClassWizard為表單視圖類加入與控件對應的成員變量,可以調(diào)用UpdateData在控件和成員變量之間交換數(shù)據(jù),但對控件的初始化工作是在OnInitialUpdate函數(shù)而不是在OnInitDialog函數(shù)中進行的。 基于表單視圖的應用程序與基于對話框的應用程序都是在應用程序中直接使用控件,但二者有很多不同之處基于對話框的應用程序是用一個對話框來作為程序的主窗口的,因而程序的主窗口的特性與對話框類似,如窗口的大小不能改變,程序沒有菜單條、工具條和狀態(tài)欄等?;诒韱我晥D的應用
24、程序仍然是基于Doc/View框架結(jié)構(gòu)的,只是視圖被換成了表單視圖,也就是說,應用程序的窗口可以改變大小,程序有菜單條、工具條和狀態(tài)欄,且程序仍然可以Dov/View運行機制來處理文檔。2、添加CDockablePane的派生類CDock,形式同前述。3、添加CFormView的派生類。利用類向?qū)В砑右粋€基類為CFormView的類CFrmView。 為CFrmView分別重載Create函數(shù)和OnMouseActivate函數(shù),前者是為了把Create函數(shù)重載為public,一行代碼都不用寫,后者是為了防止CDockablePane處于懸浮狀態(tài)時程序崩潰(不重載必然崩潰!)int CFrm
25、View:OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)/ TODO: 在此添加消息處理程序代碼和/或調(diào)用默認值int nResult = 0;CFrameWnd* pParentFrame = GetParentFrame();if( pParentFrame = pDesktopWnd )/ When this is dockednResult= CFormView:OnMouseActivate(pDesktopWnd, nHitTest, message);else/ When this is not do
26、ckedBOOL 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:OnMo
27、useActivate( pDesktopWnd, nHitTest, message );return nResult;4、向CDockablePane裝東西 在Dock.h添加protected類型的指針:CFrmView *m_frmview 在構(gòu)造函數(shù)中添加m_frmview = (CFrmView*)(RUNTIME_CLASS(CFrmView)-CreateObject(); 重載OnCreate函數(shù)和OnSize函數(shù),前者是為初始化,后者是為設置frmview在dock中的顯示大小,一般填充滿。int CDock:OnCreate(LPCREATESTRUCT lpCreate
28、Struct)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
29、 (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、利用類向?qū)?,添加兩個基類為CDockablePane的類CDock1,CDock2。2、在MainFrm.h
30、中添加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 | CB
31、RS_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 bHiColor
32、Icons=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) :Loa
33、dImage(: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); /設置可???,ANY還可替換成NOALIGN,LEFT,RIGHT,TOP,BOTTOM等m_dock2.Enab
34、leDocking(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類 利用類向?qū)?,添加兩個基類為CFormView的類CFrmView,CFrmView1; 為CFrmView和CFrmView1分別重載Create函數(shù)和OnMouseActivate函數(shù),前者是為了把Create函數(shù)重載為publ
35、ic,一行代碼都不用寫,后者是為了防止CDockablePane處于懸浮狀態(tài)時程序崩潰(不重載必然崩潰?。﹊nt CFrmView:OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)/ TODO: 在此添加消息處理程序代碼和/或調(diào)用默認值int nResult = 0;CFrameWnd* pParentFrame = GetParentFrame();if( pParentFrame = pDesktopWnd )/ When this is dockednResult = CFormView:OnMouseActi
36、vate(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( CMultiPaneFrameW
37、nd ) );/ 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
38、_frmview; (Dock2.h) 接下來以Dock1.cpp為例說,Dock2.cpp一樣,但是注意指針別指重了,在構(gòu)造函數(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;
39、/ 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)C
40、Rect 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比較熟
41、悉的這里就不講了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.
42、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, 1
43、000,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.EnableDock
44、ing(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 FAL
45、SE;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先后順序決定誰占主導DockPan
46、e(&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
47、_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),
48、 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_MUL
49、TI)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), t
50、his, 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
51、)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_
52、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
53、,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);/ B
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 ISO 21922:2021/Amd 1:2024 EN Refrigerating systems and heat pumps - Valves - Requirements,testing and marking - Amendment 1
- 臨時保潔勞務協(xié)議
- 員工評語范文(15篇)
- 企業(yè)年安全生產(chǎn)工作總結(jié)
- 中考結(jié)束后家長對老師的感言(9篇)
- 產(chǎn)科護士出科小結(jié)范文
- 中秋節(jié)晚會的活動主持詞(7篇)
- 論語制作課件教學課件
- DB12∕T 902-2019 日光溫室和塑料大棚小氣候自動觀測站選型與安裝技術要求
- 課件如何變現(xiàn)教學課件
- 初級會計實務題庫(613道)
- 初中七年級主題班會:如何管理好自己的時間(課件)
- GB 5920-2024汽車和掛車光信號裝置及系統(tǒng)
- 高中地理人教版(2019)必修第一冊 全冊教案
- 萬達入職性格在線測評題
- 2024新人教版語文二年級上冊《第五單元 課文》大單元整體教學設計
- 大型集團公司信息安全整體規(guī)劃方案相關兩份資料
- 第五單元測試卷(單元測試)-2024-2025學年六年級上冊語文統(tǒng)編版
- 打造低空應急體系場景應用實施方案
- 高校實驗室安全通識課學習通超星期末考試答案章節(jié)答案2024年
- 中華人民共和國標準設計施工總承包招標文件(2012年版)
評論
0/150
提交評論