我使用CSplitterWnd::CreateStatic拆分出两个窗格。其中一个窗格是由CListView派生的,我想在这个窗格中添加一个属于这个窗格的工具栏。使用的是:if (!m_List_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_List_ToolBar.LoadToolBar(IDR_TOOLBAR2))。
其中: 
class CDList_ToolBar : public CToolBar
CDList_ToolBar m_List_ToolBar;没有报错,但是也没有显示工具栏。向诸位请教:
1、SDI 静态拆分出的窗格中是否可以添加单独的工具栏。
2、怎样实现。另:我在主视图中添加的工具栏可以正常使用。
谢谢

解决方案 »

  1.   

    注意一下你m_List_TooLBar。CraeteEx()的第一个参数是父窗口的指针
      

  2.   

    试了,代码如下,也不行。
    在主视图中加很多个工具栏都没问题。将任何一个工具栏试图建在窗格中都是不显示,也不报错。
    CDListView* PList=(CDListView*)CSplitterWnd_2.GetPane(0,0);  //我做了两次拆分。//添加 工具栏 
    if (!m_List_ToolBar.CreateEx(PList, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_List_ToolBar.LoadToolBar(IDR_TOOLBAR2)) //CreateEx是成功的
    {
    TRACE0("未能创建工具栏\n");  
    return -1;      // 未能创建
    }
      

  3.   

    如果在 MainFrm.cpp 中在OnCreateClient
    CDListView* PList=(CDListView*)CSplitterWnd_2.GetPane(0,0);
    //添加 工具栏 
    if (!m_List_ToolBar_m.CreateEx(PList, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_List_ToolBar_m.LoadToolBar(IDR_TOOLBAR2))
    如果在DListView.cpp中在OnCreate
    //添加 工具栏
    if (!m_List_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_List_ToolBar.LoadToolBar(IDR_TOOLBAR2))在SDI拆分出的一个View中添加一个ToolBar是允许的吗?我现在一直比较怀疑。哪位朋友实际做过?
      

  4.   

    你这样做好像不对吧
    在框架中我们要停靠一个工具栏 并不是简单的一个CreateEX就行了,我们还要让它的父窗口接受他的停靠,自己也要让自己具有停靠才行,在框架中我们不是常常见到这几个个函数吗
             m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);
    我没有试过,你可以试一下
      

  5.   

    if (!m_List_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP 
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || 
    !m_List_ToolBar.LoadToolBar(IDR_TOOLBAR2))
    m_List_ToolBar.MoveWindow(0,0,100,40);试验下
      

  6.   

    可以了。
    在CDListView::OnCreate中
    if (!m_List_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM 
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || 
    !m_List_ToolBar.LoadToolBar(IDR_TOOLBAR2)) 
    {
    TRACE0("未能创建工具栏\n");
    return -1;      // 未能创建
    }
    在CDListView::OnSize中
    if(::IsWindow(m_List_ToolBar.m_hWnd))
    {
    m_List_ToolBar.MoveWindow(0,cy-18,cx,cy); 
    }
    就是我要的效果了,多谢gotooker。
    多谢joimson,不过你得方法还没有试。目前对“停靠”还没有一个透彻的理解。
    这就结贴了。