在 MFC 中,当用户手工编辑 Combo Box 的值(而不是从下拉列表中选择)时,GetCurSel() 确实会返回 -1(CB_ERR),因为当前文本不在列表项中。
此时应该用 GetWindowText() 来获取编辑框中的文本,而不是 GetLBText():
完整示例(兼容选择和手工输入两种情况):
关键点:
GetLBText(index, ...) — 仅用于获取列表中指定索引的文本
GetWindowText(...) — 获取 Combo Box 编辑框中的实际显示文本,无论是否来自列表
如果 Combo Box 是 Drop List 样式(不允许编辑),则不会出现这种情况,因为用户无法手工输入。