以下是转载内容。
================================================================================
在网上搜索了很多在工具栏上添加ComboBox的方法,经编写测试,以下这种方法比较简单而且可行,整个创建过程更合乎常理。
运用这个方法,也可以在工具栏上添加其它控件。
第一,用向导生成一个单文档应用程序,什么也不用改
第二,在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控件