转自:https://scorpiomiracle.iteye.com/blog/710511
在编一个 MFC程序时,想响应一个下拉框ComboBox控件选择改变的事件,但是,总是在下一次选择改变的时候才触发上次的响应。
参考:
http://topic.youkuaiyun.com/u/20090209/13/d1f74642-6098-40c2-8f4a-b053259b1ca3.html?seed=1987077585&r=66897224#r_66897224
中 cnzdgs 的两个回答,才明白:
1,关联变量就是通过 GetDlgItemText/SetDlgItemText 的方式更新的
2,在ComboBox发送 CBN_SELCHANGE 消息的时候,只是改变了GetCurSel获得的索引,关联变量是操作完成之后才能更新的,所以窗口文字还没有更新,通过关联变量 UpdateData(true)取得的就还是原来的文字。
3,实践证明,此时使用 CBN_EDITUPDATE 和 CBN_EDITCHANGE 没有任何反应。一种说法是 这只是响应 直接 在文本框 输入值 的事件,未求证。另外,响应 CBN_SELENDOK 的实际效果也是在窗口文字还没有改变的时候就响应了。
解决方法:
在 CBN_SELCHANGE 的响应函数中:
int index = ((CComboBox*)GetDlgItem(IDC_COMBO1))->GetCurSel();
((CComboBox*)GetDlgItem(IDC_COMBO1))->SetCurSel(index);
drawNODE(); // 此函数中有 UpdateData(true) 来获取关联变量,即改变后的值
或者:
GetCurSel()+GetLbText(n,strTemp)来取得改变后的值
博主在编MFC程序时,遇到下拉框ComboBox控件选择改变事件总是下次选择才触发上次响应的问题。参考资料后明白关联变量更新机制及消息响应情况,给出两种解决方法,一是在响应函数中设置索引并调用含UpdateData(true)的函数,二是用GetCurSel()+GetLbText取得改变后的值。
2527

被折叠的 条评论
为什么被折叠?



