Question

I have a CDialog (myDialogBox) that has a CComboBox member (myComboBox). My goal is to get the user-typed text (preferably as a CString) from the edit portion of a dropdown style CComboBox. But, I cannot seem to get it to work.

I've tried using myComboBox.GetWindowText(myString). But whenever I run it in debug mode, my code breaks at ASSERT(::IsWindow(m_hWnd)) within the CWnd::GetWindowText() function.

I've also tried myDialogBox.GetDlgItemText(MY_COMBOBOX_ID, myString), which breaks down in a similar way.

Additionally, I've tried:

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

But, it doesn't seem to be populating my info variable correctly.

Could someone point me in the right direction, please? What am I doing wrong? Any suggestions?

EDIT: Just in case it might help understand my ultimate goal, I am trying to have a combo-box where that can help a user pic and choose from a listing of strings. Nonetheless, if he/she does not want any on the dropdown-list, he can come up with his own string. I'd like a way to receive his user-typed string.

Was it helpful?

Solution

You need to call GetWindowText before the dialog is destroyed. A good place to do that would be in the DoDataExchange member function of the dialog.

Edit: You can also get an error if the CComboBox object hasn't been attached to the actual window. This also typically occurs in DoDataExchange.

OTHER TIPS

You can get the combo box text inline with the following code:

CString cStr;
CWnd* Pfield = GetDlgItem(MY_COMBOBOX_ID);
Pfield->GetWindowText(cStr);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top