现在我要实现这样一个需求,在一个新建的工具栏里添加两个控件:一个是静态文本控件,一个是进度条控件。我想静态文本控件的长度是50,进度条控件是100。我是这样做的:1. 添加一个工具栏资源,里面加两个按钮:
ID_STATICTEXT_PLACE     // 静态文本ID_PROGRESS_PLACE      // 进度条控件在资源编辑器里编辑按钮长度为100,高度为20 (不知怎的,无论编辑哪一个,这两个按钮的长度和高度都是一样的)2.在CMainFrame类里添加三个变量: CToolBar    m_oTherToolBar;   // 新建工具栏 CStatic     m_Text;    // 静态文本

CProgressCtrl m_ProgressCtrl;  // 进度条3.添加创建静态文本和进度条控件的两个函数:// 创建静态文本
BOOL CMainFrame::CreateText()
{
          CRect rect;
      #define TEXTWIDTH 50    //静态文本的宽度      //首先取得进度条在工具栏中的位置
      int index=0;
      while(m_oTherToolBar.GetItemID(index)!=ID_STATICTEXT_PLACE)
            index++;
      m_oTherToolBar.SetButtonInfo(index,ID_STATICTEXT_PLACE,TBBS_SEPARATOR,TEXTWIDTH);
      m_oTherToolBar.GetItemRect(index,&rect);      BOOL Ret = m_Text.Create(_T("就绪"),WS_CHILD|WS_VISIBLE|ES_LEFT,rect,&m_oTherToolBar,index);      if(Ret)
            return TRUE;
      else
            return FALSE;
}
// 创建进度条
BOOL CMainFrame::CreateProgressCtrl()
{
      CRect rect;
      #define PROGRESSWIDTH 100    //进度条的宽度      //首先取得进度条在工具栏中的位置
      int index=0;
      while(m_oTherToolBar.GetItemID(index)!=ID_PROGRESS_PLACE)
            index++;
      m_oTherToolBar.SetButtonInfo(index,ID_PROGRESS_PLACE,TBBS_SEPARATOR,PROGRESSWIDTH);
      m_oTherToolBar.GetItemRect(index,&rect);
      BOOL Ret = m_ProgressCtrl.Create(WS_CHILD|WS_VISIBLE|ES_LEFT
            |ES_AUTOHSCROLL,rect,&m_oTherToolBar,index);      m_ProgressCtrl.SetPos(40);
      if(Ret)
            return TRUE;
      else
            return FALSE;}
4.在CMainFrame::OnCreate函数分别调用这两个函数:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1;      // fail to create
}// 创建新的工具栏    
if (!m_oTherToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_oTherToolBar.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("Failed to create toolbar\n");
return -1;      // fail to create
}// 创建静态文本
  CreateText(); // 创建进度条
  CreateProgressCtrl();
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
  sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1;      // fail to create
} // TODO: Delete these three lines if you don't want the toolbar to
//  be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);    m_oTherToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar); DockControlBar(&m_oTherToolBar); return 0;
}   结果编译通过,但是运行起来什么效果也没有,为什么呢?

解决方案 »

  1.   


         工具栏不可以创建控件? 兄弟,这个可以的,我试过了,
    // 创建静态文本 
      CreateText(); // 创建进度条 
    //  CreateProgressCtrl();   // 这里注释掉   
        这样静态文本就出来了。
      

  2.   

         在工具栏上创建控件这里还有一篇文章呢:如何在工具栏上添加平面下拉控件http://www.vckbase.com/document/viewdoc/?id=469
      

  3.   


        大虾,我是把控件创建在分割符上啊,不信你看我的代码:// 设置按钮信息,TBBS_SEPARATOR风格指定为分隔符
    m_oTherToolBar.SetButtonInfo(index,ID_PROGRESS_PLACE,TBBS_SEPARATOR,PROGRESSWIDTH); 
          m_oTherToolBar.GetItemRect(index,&rect); // 创建控件
          BOOL Ret = m_ProgressCtrl.Create(WS_CHILD ¦WS_VISIBLE ¦ES_LEFT 
                ¦ES_AUTOHSCROLL,rect,&m_oTherToolBar,index);