2

MFC プロジェクトの MSVC 2010 pro の GUI エディターにコンボ ボックスを追加しました。外部ソースから取得している文字列のリストがあり、それらをコンボ ボックスに追加したいと考えています。しばらく検索しましたが、すべての投稿で CComboBox クラスを使用する必要があることが示唆されているようですが、GUI エディターでコンボボックス要素のリソース ID からクラス変数を取得する方法がわかりません。

CB_ADDSTRING(RESOURCE_ID, "my string");要約すると、マクロ ( など) または CComboBOx (など)を使用して、コンボ ボックスに文字列を追加するにはどうすればよいですかCComboBox::GetObject(RESOURCE_ID)->AddString("blah");

私は win32 api/mfc プログラミングをあまり行っておらず、いじり始めたところです。

4

3 に答える 3

5

satuon の答えは、win32 のやり方です。より多くの MFC ルートに行きたい場合は、読み進めてください。

数が少ない場合は、コンボの「データ」プロパティを使用して、リソース エディターに文字列を直接追加できます。

そうでない場合は、実行時にコンボを取得する必要があります。リソース エディターはコンボにリソース ID (例: IDC_COMBO1) を与えるので、それを使用してダイアログ クラス内からコンボを取得できます。

BOOL CcombotestDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("MyString");
}

にキャストする必要があることに注意してください。これはCComboBox、あらゆる種類の子コントロールを取得するためGetDlgItem()に使用できるためです。

コンボを頻繁に使用する場合は、専用のメンバーをダイアログ クラスに追加する価値があります。これは、Visual Studio ウィザードを使用して行うことができます。

  • コンボを右クリックします。
  • 「変数を追加」
  • 変数に名前を付けます (例: "m_MyCombo")
  • 終了

.h ファイルを見ると、新しいメンバーが表示されます。

CComboBox m_myCombo;

MFC がこれを配線するDoDataExchange()ので、心配する必要はありません。このメンバーをどこでも使用して、コンボを操作できるようになりました。例えば。

BOOL CcombotestDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    m_MyCombo.AddString("MyString");
}
于 2012-10-11T15:41:38.870 に答える
3

1 つの場所でのみ必要な場合は、一時的なポインターを使用できます。

CComboBox * pComboBox = (CComboBox *) GetDlgItem(nComboBoxID);

それ以外の場合は、ウィザードを使用して、ダイアログの作成時に DoDataExchange 中にコントロールにマップされるクラス変数を追加できます。

于 2012-10-11T15:41:11.727 に答える
1

SendDlgItemMessage を使用できます。

SendDlgItemMessage(hWnd, nComboBoxID, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR) strText)
于 2012-10-11T15:33:34.317 に答える