0.リストビューのハンドル取得
HWND hWndListView;
hWndListView = ::GetDlgItem(hWnd, IDC_LISTVIEW);
hWnd: リストビューの親ウィンドウのハンドル
IDC_LISTVIEW: コントロールの識別子
1.カラム(項目)の設定
LVCOLUMN insCol = {0}; // 構造体
insCol.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
// どの項目を設定するのかを指定する
// LVCF_FMT: フォーマットの指定。fmt変数で指定
// LVCF_TEXT: テキストの指定。pszTextで指定。cchTextMaxでサイズを指定(必須)
// LVCF_WIDTH: カラムの幅(pix)を指定。cxで指定。
// LVCF_SUBITEM: サブITEMのIDを指定。iSubItemで指定。
(例)
TCHAR szText[256];
insCol.cchTextMax = 256;
::_tcscpy_s(szText, 256, _T("Item"));
insCol.pszText = szText;
insCol.cx = 60;
insCol.iSubItem = 0;
ListView_InsertColumn(hWndListView, 1, &insCol); // 追加
// このマクロの中で、LVM_INSERTCOLUMNが送信されている
2.アイテム(行)の追加
LVITEM lvItem = {0}; // 構造体
lvItem.mask = LVIF_TEXT;
// 項目設定の指定
// LVIF_TEXT: テキストの指定。pszText, cchTextMaxで指定。
// LVCF_IMAGE: イメージインデックスの指定。iImageで指定。
// (T.B.D.)
lvItem.iItem = _itemAttr.size(); // 追加する位置の指定。0(最上段)~
lvItem.iSubItem = 0; // 0固定
(例)
lvItem.pszText = out;
lvItem.cchTextMax = ::_tcslen(out);
ListView_InsertItem(hWndListImgLog, &lvItem); // 行の追加
// このマクロの中で、LVM_INSERTITEMが送信されている
3.セルの値の指定(サブアイテムの指定)
2.では行を追加したが、値を設定できたのは先頭項目だけである。(REPORT形式の場合)
各セルの値を指定するには以下の方法をとる。
基本的には、アイテムの追加と同じ
LVITEM lvItem = {0}; // 構造体
lvItem.mask = LVIF_TEXT;
// 項目設定の指定
// LVIF_TEXT: テキストの指定。pszText, cchTextMaxで指定。
// LVCF_IMAGE: イメージインデックスの指定。iImageで指定。
// (T.B.D.)
lvItem.iItem = _itemAttr.size(); // 設定する行のID
lvItem.iSubItem = 1; // 設定するサブアイテムID(カラムの設定で指定したもの)
(例)
lvItem.pszText = out;
lvItem.cchTextMax = ::_tcslen(out);
ListView_SetItem(hWndListImgLog, &lvItem); // 行の追加
// このマクロの中で、LVM_SETITEMが送信されている
4.色の指定
行の色を変更するには、リストビューの描画時に通知されるWM_NOTIFYを処理する。
WM_NOTIFY
wParam: コントロールのID。ただし、識別用にはNMHDR#hWndFormまたはidFormを使用する。
lParam: NMHDR構造体のアドレス
NMHDR* pnmhdr = (NMHDR *)lParam;
if(pnmhdr->code == NM_CUSTOMDRAW) // カスタムドロー通知
{
LPNMLVCUSTOMDRAW lpCustomDraw;
lpCustomDraw = (LPNMLVCUSTOMDRAW) pnmhdr; // カスタムドロー通知用に切り替える
switch(lpCustomDraw->nmcd.dwDrawStage)
{
case CDDS_PREPAINT: // 行の更新前
// ↓ ダイアログプロシージャの場合
::SetWindowLong(hWnd, DWL_MSGRESULT, CDRF_NOTIFYITEMDRAW); // ITEM更新通知を行う
// ↓ ウィンドウプロシージャの場合
// ウィンドウプロシージャの戻り値に、CDRF_NOTIFYITEMDRAWをセットする。
break;
case CDDS_ITEMPREPAINT: // 項目ごとの描画前
lpCustomDraw->clrText = it_attr->_cl_text; // 文字色の変更
lpCustomDraw->clrTextBk = it_attr->_cl_bkg; // 背景色の変更
// 変更した場合は、通知を行う
// ↓ダイアログプロシージャの場合
::SetWindowLong(hWnd, DWL_MSGRESULT, CDRF_NEWFONT); // 変更ありの通知
// ウィンドウプロシージャの場合は、CDRF_NEWFONTを戻り値にセットする
break;
} // switch()
} // if
最終更新:2010年04月01日 21:43