質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Q&A

解決済

1回答

343閲覧

コンボボックスの一番上に新規の項目を追加したい

HOOOO

総合スコア6

VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

0グッド

0クリップ

投稿2024/07/16 09:09

実現したいこと

コンボボックス(CComboBoxEx)の一番上に新規の項目を追加したいです。

前提

visual Studio 2019でVC++を使用して、MFCアプリケーションを作成しています。

CComboBoxExで作成したコンボボックスに対して、後から一番上へ項目の追加を行いたいです。
新規にCComboBoxExで宣言をして、新しく作ったコンボボックスへ順番に項目を追加していけばよい話ですが、他の処理との都合上、元々宣言しているコンボボックス内で完結させたいです。
どのように実装を行えば、既存のコンボボックスの一番上へ新しい項目を追加することができるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HOOOO

2024/07/17 05:40

ありがとうございます。 InsertItemを使用して、実装を行うことができました。
guest

回答1

0

ベストアンサー

コンボボックス(CComboBoxEx)の一番上に新規の項目を追加したいです。

...

どのように実装を行えば、既存のコンボボックスの一番上へ新しい項目を追加することができるでしょうか?

CComboBoxEx::InsertItem を使います。

引数で渡すCOMBOBOXEXITEM構造体のメンバーiItemに0をセットすることで、項目リストのインデックス0番目、つまり一番上に要素を挿入することができます。

※日本語のリファレンスは自動翻訳のせいもあるのか、訳が分からない訳や注釈が入りがちです。そんな場合はオリジナルの英語サイトの方を見ましょう。
CComboBoxEx::InsertItem - 同英語サイト

以下、サンプルコードです。拡張コンボボックスは、ダイアログエディターにてツールボックスから"Extended Combo Box"をダイアログボックスに貼り付け、IDC_COMBO_EX1のIDをふったものです。サンプルコードとして簡単にするために要素は文字列(CBEIF_TEXT)で扱っています。

C++

1void CMFCApplication2Dlg::OnBnClickedButton1() 2{ 3 // TODO: ここにコントロール通知ハンドラー コードを追加します。 4 CComboBoxEx* pcb = (CComboBoxEx*)GetDlgItem(IDC_COMBO_EX1); 5 ASSERT_VALID(pcb); 6 COMBOBOXEXITEM item; 7 ZeroMemory(&item, sizeof(item)); 8 item.mask = CBEIF_TEXT; 9 int result; 10 11 // 3個の要素をあらかじめ挿入 12 for (int i = 0; i < 3; i++) { 13 CString s; 14 s.Format(_T("Item%d"), i + 1); 15 item.pszText = (LPTSTR)((LPCTSTR)s); 16 item.iItem = i; 17 result = pcb->InsertItem(&item); 18 //CComboBoxEx::InsertItemの返り値は挿入位置のインデックス 19 ASSERT(result == i); 20 } 21 22 // 先頭(index==0) に挿入 23 item.pszText = _T("Item on top"); 24 item.iItem = 0; 25 result = pcb->InsertItem(&item); 26 // CComboBoxEx::InsertItemの返り値でリストの先頭であることを検証 27 ASSERT(result == 0); 28}

下図は、上記サンプルコードの実行後の状態です。
イメージ説明
上記サンプルはWindows 10上でVisual Studio 2022で試したものですが、Visual Studio 2019でも同じだと思います。

投稿2024/07/17 02:44

dodox86

総合スコア9254

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HOOOO

2024/07/17 05:39

ありがとうございます。 こちらのサンプルコードを参考に行いたかった実装を行うことができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問