从CComboBox获取文本

时间:2012-08-06 19:01:58

标签: visual-c++ mfc ccombobox

我有一个CDialog(myDialogBox),其成员CComboBoxmyComboBox)。我的目标是从下拉样式CString的编辑部分获取用户输入的文本(最好是CComboBox)。但是,我似乎无法让它发挥作用。

我尝试过使用myComboBox.GetWindowText(myString)。但每当我在调试模式下运行它时,我的代码在ASSERT(::IsWindow(m_hWnd))函数内的CWnd::GetWindowText()处中断。

我也试过myDialogBox.GetDlgItemText(MY_COMBOBOX_ID, myString),它以类似的方式分解。

另外,我试过了:

    COMBOBOXINFO info;
    memset(&info,0,sizeof(info));
    myComboBox.GetComboBoxInfo(&info);
    LPTSTR str = new TCHAR[::GetWindowTextLength(info.hwndItem)];
    ::GetWindowText(info.hwndItem,str,::GetWindowTextLength(info.hwndItem));

但是,它似乎没有正确填充我的info变量。

有人能指出我正确的方向吗?我究竟做错了什么?有什么建议?

编辑:以防万一它可能有助于理解我的最终目标,我正在尝试拥有一个组合框,可以帮助用户拍照并从字符串列表中进行选择。尽管如此,如果他/她不想在下拉列表中找到任何内容,他可以拿出自己的字符串。我想要一种方法来接收用户输入的字符串。

2 个答案:

答案 0 :(得分:5)

在销毁对话框之前,您需要调用GetWindowText。这样做的好地方是对话框的DoDataExchange成员函数。

编辑:如果CComboBox对象尚未附加到实际窗口,您也会收到错误。这通常也发生在DoDataExchange

答案 1 :(得分:1)

您可以使用以下代码内联获取组合框文本:

CString cStr;
CWnd* Pfield = GetDlgItem(MY_COMBOBOX_ID);
Pfield->GetWindowText(cStr);