前提・実現したいこと
ダイアログエディターをつかい、ダイアログボックスにリストビューを取り付けようとしたのですが、ツールボックスのダイアログエディターの中にリストビューの項目がありません(リストボックスやリストコントロールというのはありますが)。
リストビューはボタンやエディットボックスなどのようにダイアログエディタでダイアログに張り付けて作成することはできないのでしょうか?
補足情報(FW/ツールのバージョンなど)
Microsoft Visual C++ 2019 C言語
WIN32 ユニコードビルド Windows10
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
Visual Studioのダイアログエディターでダイアログをデザインし、Win32 APIでリストビューを扱うときは、ツールボックスから「List Control」を選び、ダイアログボックスに貼り付けます。
このList ControlはリソースではSysListView32
になります。以下はList Controlを貼り付け、IDとしてIDC_LISTVIEW1
を与え、LVS_REPORT
のスタイルにしたリソース(*.rc)の例です。
RC
1IDD_TEST1 DIALOGEX 0, 0, 222, 121 2STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 3CAPTION "Dialog" 4FONT 8, "MS Shell Dlg", 400, 0, 0x1 5BEGIN 6 DEFPUSHBUTTON "OK",IDOK,85,100,50,14 7 CONTROL "",IDC_LISTVIEW1,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,22,16,178,72 8END 9
そしてこのリストビューをコードで扱うときは、GetDlgItem
で取得したウィンドウハンドルを使えば良いでしょう。上記リソースを利用し、3つのカラムで5行のデータを挿入したコード例を以下に示します。
C++
1void OnInitDialog(HWND hDlg) 2{ 3 HWND hListView = GetDlgItem(hDlg, IDC_LISTVIEW1); 4 WCHAR buf[32]; 5 6 // カラムをセット 7 LVCOLUMN column; 8 column.mask = LVCF_WIDTH | LVCF_TEXT; 9 column.cx = 80; 10 column.pszText = buf; 11 12 for (int i = 0; i < 3; i++) { 13 wsprintf(buf, L"column%d", i + 1); 14 ListView_InsertColumn(hListView, i, &column); 15 } 16 17 // アイテムをセット 18 LVITEM item; 19 item.mask = LVIF_TEXT; 20 item.pszText = buf; 21 22 for (int i = 0; i < 5; i++) { 23 item.iItem = i; 24 item.iSubItem = 0; 25 wsprintf(buf, L"item%d1", i + 1); 26 ListView_InsertItem(hListView, &item); 27 for (int j = 1; j < 3; j++) { 28 item.iSubItem = j; 29 wsprintf(buf, L"item%d%d", i + 1, j + 1); 30 ListView_SetItem(hListView, &item); 31 } 32 } 33} 34 35INT_PTR CALLBACK Test1Dlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 36{ 37 UNREFERENCED_PARAMETER(lParam); 38 INT_PTR result = FALSE; 39 switch (message) 40 { 41 case WM_INITDIALOG: 42 OnInitDialog(hDlg); 43 result = TRUE; 44 break; 45 46 case WM_COMMAND: 47 if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { 48 EndDialog(hDlg, LOWORD(wParam)); 49 result = TRUE; 50 } 51 break; 52 53 default: 54 break; 55 } 56 57 return result; 58}
投稿2020/09/21 18:25
総合スコア9256
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/22 01:42
2020/09/22 02:11