我有一个CDialog (myDialogBox),它有一个CComboBox成员(myComboBox)。我的目标是从下拉样式的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变量。
有人能给我指个正确的方向吗?我做错了什么?有什么建议吗?
编辑:为了帮助理解我的最终目标,我正在尝试一个组合框,它可以帮助用户图片并从字符串列表中进行选择。尽管如此,如果他/她不想在下拉列表中出现任何一个,他可以找到自己的字符串。我想要一种接收他的用户类型字符串的方法。
发布于 2012-08-06 19:06:41
在销毁对话框之前,您需要调用GetWindowText。这样做的一个好地方是在对话框的DoDataExchange成员函数中。
编辑:如果CComboBox对象没有附加到实际窗口,您也可以得到一个错误。这通常也发生在DoDataExchange中。
发布于 2017-05-19 13:21:46
您可以使用以下代码获得组合框文本:
CString cStr;
CWnd* Pfield = GetDlgItem(MY_COMBOBOX_ID);
Pfield->GetWindowText(cStr);https://stackoverflow.com/questions/11834248
复制相似问题