各位兄台:
   路过此地,小弟这相有礼了。哪一位知道怎么在工具栏里加两个组合框,我用
《Programming Windows with Mfc》上的方法试过,可前一个组合框显示不出来,
想用CDialogBar却不知怎么用,难受死了,谁能具体说说CDialogBar的用法,感激不尽
  

解决方案 »

  1.   

    给你转一帖
    以前使用CDialogBar是这样的:
    1、在CMainFrame中定义CDialogBar m_wndDlgBar;
    2、在CMainFrame::Create中执行:m_wndDlgBar.Create(this,IDD_MY_DLG,BRS_TOP,ID_MYDLGBAR );其中,IDD_MY_DLG就是我的对话框模板。
    这样就可以使用了。但是我现在有一个CEdit的扩展类CMyEdit想在此对话框中使用。一般的如果不用CDialogBar而使用CDialog派生类或CFormView,都可以如下做:
    1、用ClassWizard定义变量CEdit与IDC_MYEDIT关联;即定义CEdit m_Edit;
    2、将CEdit m_Edit 改为 CMyEdit m_Edit;
    这样的话m_Edit就可以任意使用了。但是使用CDialogBar却没有机会让我定义这样的变量!所以对话框中只能使用VC内部的控件!哪位高手能给于指点一二,不胜感激! goldfishking
    金鱼王  第1楼 回复于2003-8-3 8:58:32  
    --------------------------------------------------------------------------------能将源码放上来吗?我帮你修改! 
    ------------------------签----名----
    **********************
    *你的快乐所以我的快乐*
    *我的爱是为了你而存在*
    ********************** 
     hurtmanzc
    hurtmanzc  第2楼 回复于2003-8-3 17:13:24  
    --------------------------------------------------------------------------------
     本回复被接受作为正确答案
    你好!金鱼王,又见面了!
    看一下我的解决方案:
    1.新建一个单文档工程DialogBarDemo;
    2.加入对话框摸板IDD_DIALOG_BAR,并加入编辑框IDC_EDIT;
    3.利用ClassWizard加入类CMyEdit,基类为CEdit,加入你需要的功能;
    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_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);
        EnableDocking(CBRS_ALIGN_ANY);
        DockControlBar(&m_wndToolBar);
        //创建对话框条
      if (!m_wndDialogbar.Create(this, IDD_DIALOG_BAR,
    CBRS_LEFT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
        ID_VIEW_DIALOG_BAR))//ID_VIEW_DIALOG_BAR是菜单命令
                                 //ID,用于显示或隐藏对话框条
      {
          TRACE0("Failed to create dialog bar
                      m_wndDialogbar\n");
          return -1;    // fail to create
       }   m_wndDialogbar.EnableDocking(CBRS_ALIGN_LEFT |
                                  CBRS_ALIGN_RIGHT);
       EnableDocking(CBRS_ALIGN_ANY);
       DockControlBar(&m_wndDialogbar);
       //下面这句最关键!
        m_MyEdit.SubclassDlgItem(IDC_EDIT, &m_wndDialogbar);
        
        return 0;
    }
    5.在菜单资源“View”下加入“对话框条”命令,id为ID_VIEW_DIALOG_BAR。
    6.在CMainFrame类的消息映射部分手工加入以下两行,以处理菜单命令
    ID_VIEW_DIALOG_BAR。
         ON_COMMAND_EX(ID_VIEW_DIALOG_BAR, OnBarCheck)
         ON_UPDATE_COMMAND_UI(ID_VIEW_DIALOG_BAR, 
                       OnUpdateControlBarMenu)
      注意要加在
        //{{AFX_MSG_MAP(CMainFrame)
        ON_WM_CREATE()
        //}}AFX_MSG_MAP
    外边。
    7.编译!
    试一试,满意不?
         
    ------------------------签----名----
    ZC 
     hurtmanzc
    hurtmanzc  第3楼 回复于2003-8-3 17:18:26  
    --------------------------------------------------------------------------------补充一句:
    第三步之后,还需为CMainFrame加入两个成员变量:
    protected:
        CDialogBar m_wndDialogbar;
        CMyEdit m_MyEdit;