在工具栏(ToolBar)上添加ComboBox控件,为何每次在下拉列表中选择时,都会自动的选中工具栏上的一个按钮?
2013-09-08 17:51
691 查看
------------------------------------------------------------
本文转自:http://bbs.csdn.net/topics/10138736
------------------------------------------------------------
例程中采用如下方法在ToolBar上增加一个ComboBox:
1、增加两个分隔条,置第一个分隔条的宽度为100,第二个为12;
2、增加其它4个ToolBar按钮;
3、取得第一个分隔条的Rect区域,以此区域为界,以该ToolBar为父,动态创建一个ComboBox;
4、设置该ComboBox的内容和字体;
问题:每次当我选择ComboBox中的内容时,例如第N项,那么ComboBox后面的第N个ToolBar按钮将同时被选中。很奇怪,没有任何代码相关联。
这里是不是涉及到消息传递的问题,该ComboBox的消息传递到父窗体后是如何处理的?
原因查明:
在mainfrm.cpp文件开头存在这样的消息映射:
ON_COMMAND_RANGE(ID_STYLE_LEFT, ID_STYLE_JUSTIFIED, OnChangeStyle)
ON_UPDATE_COMMAND_UI_RANGE(ID_STYLE_LEFT, ID_STYLE_JUSTIFIED, OnUpdateStyle)
这里的ID_STYLE_LEFT...ID_STYLE_JUSTIFIED分别表示相应菜单和工具栏按钮的Command ID.
然后mainfrm.cpp定义了以下消息处理函数:
void CMainFrame::OnChangeStyle(UINT nID)
{
m_wndStyleBar.m_comboBox.SetCurSel((int)(nID-ID_STYLE_BASE));
}
void CMainFrame::OnUpdateStyle(CCmdUI* pCmdUI)
{
UINT nIndex = m_wndStyleBar.m_comboBox.GetCurSel();
pCmdUI->SetCheck((UINT)(ID_STYLE_BASE+nIndex) == pCmdUI->m_nID);
}
当选中菜单时或者工具栏按钮时,消息传递给OnChangeStyle()函数进行处理,该函数置ComboBox为指定值。然后OnUpdateStyle()函数被调用,用来处理菜单条和工具栏的显示!
可是,如果我们只选择ComboBox下拉框,会怎么样?系统并没有定义任何的消息处理!仔细想一下应该是这样,ComboBox的父窗体是工具栏m_wndStyleBar,那么ComboBox的所有消息一定先派发到m_wndStyleBar中,这样同样激发了OnUpdateStyle()函数调用!
本文转自:http://bbs.csdn.net/topics/10138736
------------------------------------------------------------
例程中采用如下方法在ToolBar上增加一个ComboBox:
1、增加两个分隔条,置第一个分隔条的宽度为100,第二个为12;
2、增加其它4个ToolBar按钮;
3、取得第一个分隔条的Rect区域,以此区域为界,以该ToolBar为父,动态创建一个ComboBox;
4、设置该ComboBox的内容和字体;
问题:每次当我选择ComboBox中的内容时,例如第N项,那么ComboBox后面的第N个ToolBar按钮将同时被选中。很奇怪,没有任何代码相关联。
这里是不是涉及到消息传递的问题,该ComboBox的消息传递到父窗体后是如何处理的?
原因查明:
在mainfrm.cpp文件开头存在这样的消息映射:
ON_COMMAND_RANGE(ID_STYLE_LEFT, ID_STYLE_JUSTIFIED, OnChangeStyle)
ON_UPDATE_COMMAND_UI_RANGE(ID_STYLE_LEFT, ID_STYLE_JUSTIFIED, OnUpdateStyle)
这里的ID_STYLE_LEFT...ID_STYLE_JUSTIFIED分别表示相应菜单和工具栏按钮的Command ID.
然后mainfrm.cpp定义了以下消息处理函数:
void CMainFrame::OnChangeStyle(UINT nID)
{
m_wndStyleBar.m_comboBox.SetCurSel((int)(nID-ID_STYLE_BASE));
}
void CMainFrame::OnUpdateStyle(CCmdUI* pCmdUI)
{
UINT nIndex = m_wndStyleBar.m_comboBox.GetCurSel();
pCmdUI->SetCheck((UINT)(ID_STYLE_BASE+nIndex) == pCmdUI->m_nID);
}
当选中菜单时或者工具栏按钮时,消息传递给OnChangeStyle()函数进行处理,该函数置ComboBox为指定值。然后OnUpdateStyle()函数被调用,用来处理菜单条和工具栏的显示!
可是,如果我们只选择ComboBox下拉框,会怎么样?系统并没有定义任何的消息处理!仔细想一下应该是这样,ComboBox的父窗体是工具栏m_wndStyleBar,那么ComboBox的所有消息一定先派发到m_wndStyleBar中,这样同样激发了OnUpdateStyle()函数调用!
相关文章推荐
- easyui combobox 下拉框自动获取 每次添加全部选项 默认选中第一行
- VC.NET界面编程中关于的ToolBar(工具栏)的编程应用(二)2008/07/01 19:22 上回说到给工具栏上添加IE风格的下拉菜单按钮,我们通过设置工具栏按钮的风格已经完成了下拉菜单按钮的添加,现在我们准备为下拉菜单按钮中响应下拉箭头部分的实现
- 用户信息:奇偶数隔行变色,选中行变色,鼠标变小手样式;姓名查询条件,过滤敏感字符;下拉列表排序;非空验证添加信息;点击按钮删除
- LigerUI下拉选择列表LigerComboBox中tree的节点初始化默认选中的问题
- C# 程序中如何向(DEV)ComboBoxEdit控件中添加下拉列表的值不使用数据绑定,就是使用代码添加
- datagridview中combobox类型的cell选中一个下拉列表之后,立即生效的事件
- easyui combobox 下拉列表添加选择项
- QT5-控件-QFontComboBox-字体选择下拉列表,使用一个标签查看效果
- VB.Net自己写的一个控件:ComboBox下拉列表中显示多列数据(可以绑定数据表)
- 隔行变色,选中变色,鼠标变小手样式;姓名查询条件 过滤敏感字符 下拉列表排序 非空验证添加信息 点击按钮删除
- select下拉列表 和 radio单选按钮控件开关---- 根据值选择选项 & change事件
- 重写winform 的 ComboBox控件实现自动加载磁盘下拉列表框
- 一个不错的自动添加日期的控件
- winform程序之comboBox控件下拉列表的应用(简单)
- selenium自动化测试 java 选择 下拉列表 的一个选项
- 如何重载ComboBox 使其下拉按钮(带下箭头的)和下拉列表的垂直滚动条的宽度改变?(自绘ComboBox)
- 用下拉列表选中一个省或市弹出相应的市或区
- 用webbrowser控件做一个资源管理器,如何得到IE控件中选中(鼠标多选)的文件名称列表?
- Eric的日期选择下拉列表小控件
- .NET中用弹出窗口添加或修改一个页面,当添加或修改相关内容后按下提交按钮自动刷新页面的JS代码