以降、ダイアログ上にCListCtrlが存在するものとして、記載する。
先頭行に移動
例)対象となるCListCtrlクラスのサブクラスの場合
PostMessage(WM_VSCROLL, MAKELONG(SB_TOP, NULL));
最終行に移動
例)対象となるCListCtrlクラスのサブクラスの場合
PostMessage(WM_VSCROLL, MAKELONG(SB_BOTTOM, NULL));
全カラム削除
while(m_listCtrl.DeleteColumn(0));
全アイテム削除
listCtrl().DeleteAllItems();
但し、仮想リストの場合は除く。
拡張スタイル設定
拡張スタイルは、SetExtendedStyle()を使用する。
例)
DWORD dwStyle = m_listCtrl.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP;
m_listCtrl.SetExtendedStyle(dwStyle);
主な拡張スタイル定義は、以下のとおり。
定義名 |
内容 |
LVS_EX_FULLROWSELECT |
行全体選択表示(レポート設定のみ) |
LVS_EX_INFOTIP |
ツールチップ表示 |
・・・ |
・・・ |
仮想リストコントロール(ダイアログ上に存在する)
リスト要素データを
コントロールが管理するのではなく、プログラム(オーナー)側で管理している。よって、表示に必要なデータだけを表示することで、大量のデータを素早く表示できる。
実装手順
- CListCtrlのプロパティを開き、下記赤部分のように設定する。
例)Visual Studio 2005
- ダイアログ初期化処理において、CListCtrlに関する項目(カラム等)を設定する。
- ダイアログのDefWindowProc()をオーバーライドし、 CListCtrl用にWM_NOTIFYメッセージを処理する。
例)LRESULT CXXXXDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
switch (message)
{
case WM_NOTIFY:
return Notify(lParam);
}
return [[CDialog]]::DefWindowProc(message, wParam, lParam);
- ダイアログのメソッドとして、上記メッセージを処理するOnGetdispinfo()を追加する。
例)LRESULT CXXXXDlg::Notify(LPARAM lParam)
LPNMHDR lpNMHDR = reinterpret_cast<LPNMHDR>(lParam);
switch (lpNMHDR->code)
{
case LVN_GETDISPINFO:
{
LV_DISPINFO* lpDispInfo = reinterpret_cast<LV_DISPINFO*>(lParam);
LVITEM* pItem = &(lpDispInfo)->item;
UINT uRow = pItem->iItem;
UINT uCol = pItem->iSubItem;
// 文字列表示のみ
if (pItem->mask & LVIF_TEXT)
{
switch (uCol)
{
case 0:
・
・
default:
break;
}
}
default:
break;
}
return 0;
コメント
最終更新:2010年09月22日 22:20