一个基于对话框的程序,怎样给这个对话框加工具栏和状态栏?我定义了CToolBar和CStatusBar的成员变量,然后在OnInitDialog里Create,从函数的返回值看都成功了,可是看不到。
另外,怎样在代码里手工控制工具栏的位置和大小?

解决方案 »

  1.   

    http://www.vchelp.net/vchelp/archive.asp?type_id=5&class_id=1&cata_id=1&article_id=523
      

  2.   

    条     在 OnInitDialog 中加入下面代码: 
      BOOL CYourDlg::OnInitDialog()
      {
           CDialog::OnInitDialog();     
     
           // Create the toolbar. To understand the meaning of the styles used, you 
           // can take a look at the MSDN for the Create function of the CToolBar class.
           ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS |CBRS_FLYBY | CBRS_BORDER_BOTTOM);
     
          // I have assumed that you have named your toolbar's resource as IDR_TOOLBAR1.
          // If you have given it a different name, change the line below to accomodate 
          // that by changing the parameter for the LoadToolBar function.
          ToolBar.LoadToolBar(IDR_TOOLBAR1);
      
          CRect rcClientStart;
          CRect rcClientNow;
          GetClientRect(rcClientStart);
     
          // To reposition and resize the control bar
          RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,0, reposQuery, rcClientNow);
         CPoint ptOffset(rcClientNow.left - rcClientStart.left,rcClientNow.top-rcClientStart.top);
     
         CRect rcChild;
         CWnd* pwndChild = GetWindow(GW_CHILD);
     
         while (pwndChild)
         {
           pwndChild->GetWindowRect(rcChild);
           ScreenToClient(rcChild);
           rcChild.OffsetRect(ptOffset);
           pwndChild->MoveWindow(rcChild, FALSE);
           pwndChild = pwndChild->GetNextWindow();
         }
     
         CRect rcWindow;
         GetWindowRect(rcWindow);
         rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
         rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
         MoveWindow(rcWindow, FALSE);   
     
         // And position the control bars
         RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
      
         return TRUE;  // return TRUE  unless you set the focus to a control
      }
        
      

  3.   

    定义 CStatusBar 变量:  CStatusBar m_StatusBar;
         定义状态条指定状态:  static UINT BASED_CODE indicators[] =
      {
         ID_INDICATOR_CAPS,
         ID_INDICATOR_NUM
      };
         在 OnInitDialog 中加入下面代码: 
      m_StatusBar.CreateEx(this,SBT_TOOLTIPS,WS_CHILD|WS_VISIBLE|CBRS_BOTTOM,AFX_IDW_STATUS_BAR);
     
      // Set the indicators namely caps and nums lock status
      m_StatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));
     
      CRect rect;
      GetClientRect(&rect);
                     
      m_StatusBar.SetPaneInfo(0,ID_INDICATOR_CAPS,SBPS_NORMAL,rect.Width()/2);
      m_StatusBar.SetPaneInfo(1,ID_INDICATOR_NUM,SBPS_STRETCH ,rect.Width()/2);
     
      RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,ID_INDICATOR_NUM);
     
      m_StatusBar.GetStatusBarCtrl().SetBkColor(RGB(180,180,180));
      

  4.   

    //还有加菜单
    //IDR_MENU1,你自定义的菜单栏
    //设置菜单
    m_Menu.LoadMenu(IDR_MENU1);
    AfxGetMainWnd()->SetMenu(&m_Menu);
      

  5.   

    现在还有两个问题,请再帮一下忙,解决后一并给大家加分。如何去掉状态栏右下角的那个小三角?
    我在CreateEx中没有设置SBARS_SIZEGRIP风格,还是有那个小三角。如何让工具栏初始的时候就靠窗口的右边(保持水平)?工具栏的风格是不可停靠的。