【发布时间】:2010-10-03 15:13:28
【问题描述】:
如何获取组合框中当前选择的值(字符串)?
(不是整数索引)
【问题讨论】:
标签: visual-c++ mfc visual-c++-6
如何获取组合框中当前选择的值(字符串)?
(不是整数索引)
【问题讨论】:
标签: visual-c++ mfc visual-c++-6
可能有更好的方法(我的 MFC 有点生锈),但您似乎应该能够调用 CComboBox::GetLBText(),并使用 CComboBox::GetCurSel() 将当前选择传递给它。
【讨论】:
一个普通的旧 GetWindowText 也可以工作。
编辑:正如 ajryan 指出的那样,GetWindowText 实际上不在 CBN_SELCHANGE 处理程序中工作,因为新选择已生效,但窗口文本发送WM_COMMAND 时,尚未使用新选择的文本进行更新。
【讨论】:
使用 GetLBText,传入索引和一个 CString 对象。
编辑:太慢了!
【讨论】:
CB_GETCURSEL 返回整数索引
CB_GETLBTEXT 在 CB_GETCURSEL 返回字符串
【讨论】:
char buffer[MAX_COMBO_STRING_LENGTH];
int index= static_cast<int>(SendDlgItemMessage(hDlg, ID_COMBO_BOX, CB_GETCURSEL, 0, 0));
SendDlgItemMessage(hDlg, ID_COMBO_BOX, CB_GETLBTEXT, index, (LPARAM)(LPCTSTR)buffer);
//buffer contains the selected text unless CB_GETCURSEL returned CB_ERR (-1) to the index
【讨论】:
有几种方法可以解决这个问题。
当您使用组合时,您可以将其映射到变量。
int。CString。正如其他人所说,当您的组合是 下拉 时,您可以将其视为具有两个控件(列表和编辑)。使用GetWindowText 来访问编辑控件文本。
您可以使用许多helper macros。还有一个用于获取文本(ComboBox_GetText 宏)。无需将控件映射到变量。
这真的取决于您对组合控件的需求和使用情况。
【讨论】: