简介
这篇简短的文章介绍了一种简单的方法内添加一个或多个窗格的拆分窗口的工具栏。通常当你创建一个拆分窗口在CMainFrame类的OnCreateClient方法,您提供的CSplitterWnd的CView派生类:CreateView的方法。然而,提供的类并不需要一个CView的派生类。它可以是任何CWnd的派生类。 CSplitterWnd的类,如果你看看MFC代码里面,你会看到这个类使用的CWnd指针CView的指针。在CSplitterWnd的类的方法,处理与Windows,使用CWnd的指针。举例来说,CSplitterWnd的::GetPane返回一个CWnd。这使我们能够使用CFrameWnd派生类,而不是一个CView派生类。自CFrameWnd类提供了所有的工具栏/对接的支持,我们可以很容易地从CFrameWnd派生的每个分隔窗格添加一个工具栏。下面是从我的示例应用程序的OnCreateClient代码:BOOL的CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs,CCreateContext * pContext){ m_wndSplit.CreateStatic(这一点,1,2); m_wndSplit.CreateView(0,0,pContext - GT; m_pNewViewClass,CSIZE(175,500)
pContext); / /创建视图使用一个CFrameWnd派生类。 m_wndSplit.CreateView(0,1,RUNTIME_CLASS(CSplitFrame),CSIZE(175,500)
pContext); / /激活视图窗格。 &
#160;SetActiveView((CView的*)m_wndSplit.GetPane(0,0));
60; RecalcLayout(); 返回TRUE;
; / /返回CFrameWnd的:OnCreateClient(lpcs,pContext);}
现在,你的CFrameWnd派生类必须做两件事。首先,它已在OnCreateClient方法创建你的视图类。我的示例代码使用一个CFormView派生类:BOOL CSplitFrame::OnCreateClient(LPCREATESTRUCT lpcs
CCreateContext * pContext){ CSplitView * PVIEW; / /创建一个上下文。 CCreateContext范围内; pContext =安培;上下文; / /指定自定义视图。 pContext - GT; m_pNewViewClass = RUNTIME_CLASS(CSplitView); &
#160;/ /创建视图。 PVIEW =(CSplitView *)CreateView的(pContext,AFX_IDW_PANE_FIRST); 如果(PVIEW == NULL)
0; 返回FALSE; / /通知视图。
60; PVIEW - GT; SendMessage消息(WM_INITIALUPDATE);
60;SetActiveView(PVIEW,FALSE); 返回TRUE;}
CFrameWnd派生类必须做的第二件事是创建工具栏将出现在拆分窗格:INT CSplitFrame:在OnCreate(LPCREATESTRUCT lpCreateStruct){ (CFrameWnd的:在OnCreate(lpCreateStruct)== -1) 返回-1;
60; (!m_wndToolBar.CreateEx(这一点,TBSTYLE_FLAT
60; WS_CHILD | WS_VISIBLE | CBRS_TOP
60; | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)| | !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("无法创建工具栏"\ nquot"); 返回-1; / /未能创建 } m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.SetBorders(3,3,3,3); &
#160; EnableDocking(CBRS_ALIGN_ANY); DockControlBar(AMP; m_wndToolBar); 返回0;}
这就是它!现在你有一个完全可停靠的工具栏,您的拆分窗口的窗格。很简单!|汤姆舒普