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

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

新規登録して質問してみよう
ただいま回答率
85.47%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

Q&A

解決済

2回答

2362閲覧

ダイアログエディタでダイアログにリストビューをつけるには?

mery

総合スコア27

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

0グッド

0クリップ

投稿2020/09/21 04:14

前提・実現したいこと

ダイアログエディターをつかい、ダイアログボックスにリストビューを取り付けようとしたのですが、ツールボックスのダイアログエディターの中にリストビューの項目がありません(リストボックスやリストコントロールというのはありますが)。

リストビューはボタンやエディットボックスなどのようにダイアログエディタでダイアログに張り付けて作成することはできないのでしょうか?

補足情報(FW/ツールのバージョンなど)

Microsoft Visual C++ 2019 C言語
WIN32 ユニコードビルド Windows10

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

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

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

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

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

guest

回答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

dodox86

総合スコア9183

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

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

mery

2020/09/22 01:42

回答ありがとうございました。うまく出来ました。 リストコントロールでよかったのですね。ダイアログボックスに貼り付けたときの見た目が、リストビューと違く見えた(複数のアイコンが表示されている)ので、違うものだと思い込んでました。
dodox86

2020/09/22 02:11

> ダイアログボックスに貼り付けたときの見た目が、リストビューと違く見えた ウィンドウスタイルをセットし、実際にデータを入れてみないと見た目が確認できないので、確かに分かりづらいですね。Win32 APIで直接扱う機会も今はほとんど無いですし。
guest

0

普通のフォームにリストビューをつけて、ダイアログとして実装すればどうでしょうか。

投稿2020/09/21 04:36

y_waiwai

総合スコア87784

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

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

mery

2020/09/21 04:54

回答ありがとうございます。 いつもはCreateWindowEx関数を使い作成してますが、ダイアログエディターで作成したほうがコントロールの位置を変えるときに座標を指定しなくて済むので、ダイアログエディターを使う方法を探しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問