3

メンバー( )を持つCDialog(myDialogBox)があります。私の目標は、ドロップダウンスタイルの編集部分からユーザーが入力したテキスト(できれば)を取得することです。しかし、私はそれを機能させることができないようです。CComboBoxmyComboBoxCStringCComboBox

を使ってみました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 に答える