2011-08-25 63 views

回答

2

延长CSplitterWndEx如下一个非常小的类:

class CPaneSplitter : public CSplitterWndEx 
{ 
public : 
    BOOL AddWindow(int row, int col, CWnd* pWin,CString clsName, 
    DWORD dwStyle,DWORD dwStyleEx, SIZE sizeInit); 
}; 

以下成员添加到MyDockablePaneClass

CTreeCtrl m_wndTree 
CListCtrl m_wndList 
CPaneSplitter wndSplitter 

MyDockablePaneClass的OnCreate如下所示:

int MyDockablePaneClass::OnCreate(LPCREATESTRUCT lp) 
{ 
if(CDockablePane::OnCreate(lp)==-1) 
     return -1; 
    DWORD dwStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT 
     | TVS_HASBUTTONS |TVS_EDITLABELS; 
    DWORD dwStyleEx = 0; 
    m_wndSplitter.CreateStatic(this,2,1); 
    if(!m_wndSplitter.AddWindow(0,0,&m_wndTree,WC_TREEVIEW,dwStyle, 
dwStyleEx,CSize(100,100))) 
     return -1; 

    dwStyle = WS_CHILD | WS_VISIBLE | LVS_ICON | LVS_SHAREIMAGELISTS; 
    dwStyleEx = 0; 
      if(!m_wndSplitter.AddWindow(1,0,&m_wndList,WC_LISTVIEW,dwStyle 
,dwStyleEx,CSize(100,100))) 
     return -1; 


    if(!m_toolbar.Create(this, AFX_DEFAULT_TOOLBAR_STYLE, IDR_REFTREE)) 
    { 
     TRACE0("Failed to create RefTreePane Toolbar Control\n"); 
     return -1; 
    } 
    m_toolbar.LoadToolBar(IDR_REFTREE, 0, 0, TRUE /* Is locked */); 
    m_toolbar.SetPaneStyle(m_toolbar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY); 
    m_toolbar.SetPaneStyle(m_toolbar.GetPaneStyle() & ~(CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT)); 
    m_toolbar.SetOwner(this); 
    // All commands will be routed via this control , not via the parent frame: 
    m_toolbar.SetRouteCommandsViaFrame(FALSE); 
    return 0; 
} 

附加亨德勒的筛上部分如下

void MyDockablePaneClass::OnSize(UINT type,int cx,int cy) 
{ 
    CDockablePane::OnSize(type, cx, cy); 
    int cyTlb = m_toolbar.CalcFixedLayout(FALSE, TRUE).cy; 
    CRect rectClient; 
    GetClientRect(rectClient); 
    m_toolbar.SetWindowPos(NULL, rectClient.left, rectClient.top, rectClient.Width() 
    , cyTlb,SWP_NOACTIVATE | SWP_NOZORDER); 
    m_wndSplitter.SetRowInfo(0,(cy-cyTlb)/2,25); 
    m_wndSplitter.SetRowInfo(1,(cy-cyTlb)/2,25); 
    m_wndSplitter.SetWindowPos(NULL,rectClient.left 
    , rectClient.top + cyTlb 
    , rectClient.Width() , rectClient.Height() - cyTlb , SWP_NOZORDER | SWP_NOACTIVATE); 
} 

注意我添加处理程序,在筛上部分的处理工具栏上的定位,如果你没有一个工具栏删除代码,并承担cyTlb = 0

祝你好运

0

Class View似乎是一个CDockablePane,但是将Class View的上下划分的东西似乎不是与CDockablePanes相关的任何东西,而是分割器。 我已经成功地做到这一点用,我从CSplitterWndEx

衍生