【VC+MFC】在工具栏上添加ComboBox控件的方法

    最近在做一个机械手臂仿真软件开发,在工具栏上添加一个ComboBox下拉控件,对仿真模式和环境编辑模式进行切换,对用户来说,直观易懂,而对我们编程的来说,运用这种方式,再添加相应的控制程序走向的变量,就可以有效切换运行模式,使能或者灰掉一些Button和选项,减少程序产生Bug的可能。

    在网上搜索了很多在工具栏上添加ComboBox的方法,经编写测试,以下这种方法比较简单而且可行,整个创建过程更合乎常理。

    运用这个方法,也可以在工具栏上添加其它控件。

    以下是转载内容。

 

//============================================================  Start  ================================================================//

    第一,用向导生成一个单文档应用程序,什么也不用改

 

    第二,在CMainFrame框架中添加一个CComboBox类型的全局变量,取名为m_wndComboBox,再点击“resourceView”,在“String table”中添加一个ID,取名为“ID_COMBOBOX”

 

    第三,在CMainFrame类的OnCreate函数中的  最后(return之前)  添加如下代码:

    CToolBarCtrl&pToolBar=m_wndToolBar.GetToolBarCtrl( ); //获得一个工具栏的对象

    int Count;

    Count=pToolBar.GetButtonCount( );//得到工具栏中有多少个按钮

    m_wndToolBar.SetButtonInfo(Count-1,ID_COMBOBOX,TBBS_SEPARATOR,120);//设置最后一个按钮的信息,详细的用法请参考MSDN

    CRect rect;

    pToolBar.GetItemRect(Count-1 ,&rect);//得到最后一个按钮的大小,以便后面可以设置ComboBOX的大小

    rect.bottom+=120;         //利用上面得到的大小重新设置ComboBox的高度

    rect.right=rect.left+120; //这就是设置ComboBox按钮的宽度(这里可以调整ComboBox按钮的宽度)

    if(!m_wndComboBox.Create(WS_VISIBLE|WS_CHILD|CBS_AUTOHSCROLL|CBS_DROPDOWNLIST,rect,&m_wndToolBar,ID_COMBOBOX))//这里是动态创建一个ComboBox,包括一些样式等等,具体详见MSDN

    {

       TRACE0(“Failedto create ComboBox \n”);

       return -1;      // 创建失败就返回

     }

    else

    {

         m_wndComboBox.AddString(“添加成功1”);

         m_wndComboBox.AddString(“添加成功2”);

         m_wndComboBox.SetCurSel(0);

    }

 

    上面的步骤已经实现在工具栏上添加ComboBox,接着是添加它的消息相应,步骤如下:

     第一,首先在CMainFrame类的.cpp文件中添加消息映射,如粗体部分所示:

    BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)

    //{ {AFX_MSG_MAP(CMainFrame)

             // NOTE – the ClassWizard will add andremove mapping macros here.

             // DO NOT EDIT what you see in these blocks of generated code !

    ON_CBN_SELCHANGE(ID_COMBOBOX,OnSelChange)//这里添加的是消息映射,

    ON_WM_CREATE( )

    //}}AFX_MSG_MAP

    END_MESSAGE_MAP()

 

    第二,在CMainFrame类的.h文件中添加消息处理函数,当然了你也可以先添加这个。如粗体部分所示:

    //{ {AFX_MSG(CMainFrame)

    afx_msg int OnCreate(LPCREATESTRUCTlpCreateStruct);

    afx_msg void OnSelChange(); //这里是添加映射函数的声明

             // NOTE – the ClassWizard will add andremove member functions here.

             // DO NOT EDIT what you see in these blocks of generated code!

    //}}AFX_MSG

     DECLARE_MESSAGE_MAP( )

 

    第三,在回到CMainFrame类的CPP文件文件中添加映射函数的定义,如下面所示:

    void CMainFrame:: OnSelChange ( )

    {

        MessageBox(“你选择了我”);

    }

   上面的步骤已经完成,如果还想添加其他的消息,就按照上面的步骤添加就可以了。

 

    备注:其实任何的按钮或者其他控件都可以用此方法来实现的,你也可以在上面动态创建一个RadioButton控件

 

//============================================= End ==================================================//

 

最后,不要直接复制粘贴网页上的代码到程序中,会报错或者出现异常。

    原文作者:Siufei_Au
    原文地址: https://blog.csdn.net/Siufei_Au/article/details/38436669
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞