3

我有一个 CDialog ( myDialogBox),它有一个CComboBox成员 ( myComboBox)。CString我的目标是从下拉样式的编辑部分获取用户输入的文本(最好是 a ) 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正确填充我的变量。

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

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

4

2 回答 2

6

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

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

于 2012-08-06T19:06:41.423 回答
2

您可以使用以下代码内嵌组合框文本:

CString cStr;
CWnd* Pfield = GetDlgItem(MY_COMBOBOX_ID);
Pfield->GetWindowText(cStr);
于 2017-05-19T13:21:46.120 回答