在VIEW中可以动态生成contorl控件并显示,那么是否也可以生成CControlBar并显示呢。我实验过在VIEW中生成CDialogBar,程序可以运行,但无法显示出所生成的
CDialogBar,是否方法不对?望各位大侠帮忙,谢谢

解决方案 »

  1.   

    我做了一个类似的程序,不过我是在MainFrame当中定义出了一个CDialogBar,并在MainFrame::OnCreate()方法中将这个DialogBar创建了出来(用其Create方法)。然后在DialogBar上面放置一个Tab控件,用来跟每一个新生成的View一一对应起来。
      

  2.   

    显示方式类似于UEdit9的样子。
      

  3.   

    这样好象更容易些,而且Create那个CDialogBar的时候可以设置和其关联的Menu Item ID,通过点击这个Menu Item可以实现对该DialogBar的显示和隐藏。
      

  4.   

    我的目的是想在视中使用CTabCtrl控件,先在资源编辑器中建立对话框资源模板IDD_DLG_BAR,并在其中加入CTabCtrl控件IDC_TAB
    在视类中声明
    CDialogBar m_DlgBar;
    CMyTab m_TabCtrl;    //CMyTab从CTabCtrl继承在类实现中
    void CTestvwView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CView::OnCreate(lpCreateStruct) == -1)
    return -1;

    // TODO: Add your specialized creation code here
    if (!m_DlgBar.Create(this, IDD_DLG_BAR,
    CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
    ID_VIEW_TAB_BAR)) //ID_VIEW_TAB_BAR是菜单命令ID,用于显示或隐藏对话框条
       {
    TRACE0("Failed to create dialog bar m_wndDialogbar\n");
    return -1; // fail to create
       }
       //m_wndTabBar.EnableDocking(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);
       //EnableDocking(CBRS_ALIGN_ANY);
       //DockControlBar(&m_wndTabBar);
       //将m_MyTab与控件IDC_TAB绑定
       m_TabCtrl.SubclassDlgItem(IDC_TAB, &m_DlgBar); 
       return 0;
    }
      

  5.   

    to:zzpzheng() ( ) 
    我在MainFrame中实验过,的确可以,但在视中不行
      

  6.   

    这样做好像确实不能显示。
    我上面说的方法可以实现,给个email地址,给你代码。
      

  7.   

    谢谢zzpzheng()
    你的方法的确可以实现,类似的代码我已经有了,再次感谢
    我是想大家讨论一下为什么在视中就不能实现,MainFrame和VIEW在这方面的差别在哪里
      

  8.   

    如果你在View中实现的话,恐怕要自己画了。前几天我也正在看这个问题,也参考了很多代码,如果不在MainFrame中做而且又要求美观,TabCtrl可以随着MDI的大小变化的话好像只能自己画了。很麻烦。你可以参考现成的开发包:GuiToolKit,很全面的一个代码库,里面有类似的代码和例子CGuiTabbedDemo,功能和你说的类似,但是是自己画的,没有采用CDialogBar。http://www.beyondata.com/default.htm有下载。
      

  9.   

    昨天看了看MSDN,有一个CMiniFrameWnd类,ControlBar要以这个类作为容器。
    MSDN说明如下:
    A CMiniFrameWnd object represents a half-height frame window typically seen around floating toolbars. These mini-frame windows behave like normal frame windows, except that they do not have minimize/maximize buttons or menus and you only have to single-click on the system menu to dismiss them.
      

  10.   

    另外,根据Doc/View的架构来说,FrameWnd是作为所有View的容器的,而View仅仅是显示Doc的内容而已。可能是因为这个原因吧,所以不能在View中显示DialogBar。