问个ComboBox的问题

SXSXY 2004-04-29 05:28:00
请问ComboBox中的这三个消息有什么区别
CBN_EDITCHANGE
CBN_EDITUPDATE
CBN_SELCHANGE

查了MSDN,还是有些不明白。尤其是前两个,不懂它们有什么不同。
对于CBN_SELCHANGE,我现在的理解是用鼠标点击下拉框就会触发此消息,而对于Dropdown的ComboBox,改变框中的文字则不触发此消息
...全文
124 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
SXSXY 2004-04-29
  • 打赏
  • 举报
回复
GetWindowText
KONIEWU 2004-04-29
  • 打赏
  • 举报
回复
ComboBox中,我无法得到当前编辑的字符串
当前编辑字符串的index=-1
如果用GetLBText(index,sel)
会出现断言对话框,实在不知道怎么解决,只有在KeyDown中记录用户输入的字符
然后在用户敲“Enter"键的时候把,把字符串
AddString(str)
然后再用SetCurSel(Index)调到当前显示。
不知道谁比较好的方法。
SXSXY 2004-04-29
  • 打赏
  • 举报
回复
这样岂不是不管ComboBox是否被改变都会发生此事件,我要的并不是这样的效果
不过还是很感谢你
王国凡 2004-04-29
  • 打赏
  • 举报
回复
Q: 焦点离开ComboBox之后再做事件处理,该怎么办呢?
A: 响应 ON_CBN_KILLFOCUS 事件
SXSXY 2004-04-29
  • 打赏
  • 举报
回复
真是太感谢了
不过我还点疑问
通过上面方法的观察,只要text发生改变,就会发生这两个消息。那么我如果想等输入完text,焦点离开ComboBox之后再做事件处理,该怎么办呢
王国凡 2004-04-29
  • 打赏
  • 举报
回复
void CDialog2::OnEditupdateCombo1()
{
AfxMessageBox("Update");
}

void CDialog2::OnEditchangeCombo1()
{
AfxMessageBox("change");
}

void CDialog2::OnSelchangeCombo1()
{
AfxMessageBox("Selchange");
}

先修改 text ,再选中下拉框改变 text ,观察结果。
王国凡 2004-04-29
  • 打赏
  • 举报
回复
ON_CBN_SELCHANGE
在下拉选中的 text 改变了就发生,可以用 GetLBText 来获取 text,而不是 GetWindowText
王国凡 2004-04-29
  • 打赏
  • 举报
回复
ON_CBN_EDITCHANGE
在 text 改变了,显示出来之后发生,
( 如果是 CBS_DROPDOWNLIST 样式,则不发生 )

ON_CBN_EDITUPDATE
在 text 改变了,显示出来之前发生,
( 如果是 CBS_DROPDOWNLIST 样式,则不发生 )

也就是 ON_CBN_EDITCHANGE 在 ON_CBN_EDITUPDATE 之后发生

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧