mfc里combo box手工修改值后GetCurSel获取不到?
专栏:web开发笔记 April 22, 2026, 11:12 a.m. 14 阅读
GetCurSel()返回0xffffffff

在 MFC 中,当用户手工编辑 Combo Box 的值(而不是从下拉列表中选择)时,GetCurSel() 确实会返回 -1CB_ERR),因为当前文本不在列表项中。

此时应该用 GetWindowText() 来获取编辑框中的文本,而不是 GetLBText()

CString cs_device_addr;
m_i2c_device_addr.GetWindowText(cs_device_addr);

完整示例(兼容选择和手工输入两种情况):

int cur_sel = m_i2c_device_addr.GetCurSel();
CString cs_device_addr;

if (cur_sel != CB_ERR) {
    // 用户从下拉列表中选择了某项
    m_i2c_device_addr.GetLBText(cur_sel, cs_device_addr);
} else {
    // 用户手工编辑了值,或编辑框为空
    m_i2c_device_addr.GetWindowText(cs_device_addr);
}

关键点:

  • GetLBText(index, ...) — 仅用于获取列表中指定索引的文本

  • GetWindowText(...) — 获取 Combo Box 编辑框中的实际显示文本,无论是否来自列表

如果 Combo Box 是 Drop List 样式(不允许编辑),则不会出现这种情况,因为用户无法手工输入。

感谢阅读,更多文章点击这里:【专栏:web开发笔记】
最新20篇 开设专栏