2006-06-10(Sat)

リストビュー第2回 アイテムを格納してみる

小休止 7 8 回

第2回 アイテムを格納してみる

第1回で作成したリストビューにアイテムを配置してみる。
ソースコードは第1回の続きなので、そういうことで。

1)カラムを作る
まず、それっぽくカラムを作ってみる。
縦がレコード(行)で、横がカラム(列)。(別な呼び方もある。文中コロコロ書き方が変わるかも知れん)
ウィンドウ作成時の処理に以下のコードを追加。
'カラム初期設定
Dim clm As LVCOLUMN 'リストビューカラム構造体
Dim i As Long
Dim buf As String
clm.mask = LVCF_FMT or LVCF_WIDTH or LVCF_TEXT  'マスクの設定(書式と幅と文字を弄るよ)
clm.fmt = LVCFMT_LEFT           'カラムの書式(左詰でお願いします)
clm.cx = 100                    'カラムの幅(とりあえず100で)
For i = 0 to 2
    buf = "カラム" + Str$( i )
    clm.pszText = StrPtr( buf ) 'カラムに表示する文字
    SendMessage( hList, LVM_INSERTCOLUMN, i, VarPtr(clm) As Long) 'カラム作成
Next


LVCOLUMN 構造体の .mask にどのメンバを操作するか指定。
今回はカラムの書式と幅と文字を弄るよ~と指定してある。
.fmt メンバ には書式、.cx メンバには幅、.pszText メンバにはカラムに表示する文字を指定する。

作成するときは SendMessage で hListLVM_INSERTCOLUMN を送る。
パラメータは lParam にカラム作成位置、wParamLVCOLUMN 構造体のアドレスをセット。
ForNext で3つカラムを作ってみた。


2)アイテムを格納する
アイテムをリストビューにぶち込んでみる。
ぶち込み方の説明なので、これもウィンドウ作成時にやってしまう。
ウィンドウ作成時の処理に以下のコードを追加。
Dim lvi As LVITEM   'リストビューアイテム構造体
For i = 0 to 5
    lvi.mask = LVIF_TEXT or LVIF_PARAM  'マスクの設定(アイテムの文字と、固有32ビット値を弄るよ)
    lvi.lParam = i                      '固有32ビット値(とりあえず 0 )
    lvi.iItem = i                       'インデックス(縦方向)の位置
    lvi.iSubItem = 0                    'サブアイテム位置(横方向)、アイテム(先頭)を参照する場合は 0
    buf = "アイテム" + Str$( i )
    lvi.pszText = StrPtr( buf )         'レコード挿入時のアイテムの内容
    SendMessage( hList, LVM_INSERTITEM, 0, VarPtr(lvi) As Long) 'アイテム(つかアイテムの入ったレコード)を挿入
    'サブアイテムを格納してみる
    lvi.mask = LVIF_TEXT                'マスクの設定
    lvi.iSubItem = 1                    'カラム(横方向)位置
    buf = "サブアイテム" + Str$( 5 - i )
    lvi.pszText = StrPtr( buf )         'レコード挿入時の先頭アイテムの内容
    SendMessage( hList, LVM_SETITEM, 0, VarPtr(lvi) As Long)    'アイテムを格納
Next


新規でアイテムを挿入すると、先頭アイテムが格納されたレコードが作成される。
2つ目以降のサブアイテム(横方向ね)を格納したい場合は、作成したレコードに対してサブアイテムを格納するという手順になる。

アイテムの固有32ビット値というのは、アイテムには見えないけどそーゆー値が振られていて、その値はソートやレコードの入れ替えをする時に必要になってくる。
俺は面倒なので、最初全部固有32ビット値を 0 で作成して、後でまとめて全レコードの固有32ビット値を連番で整理するようなやり方をよくやる。 ま、今回は格納時に 0,1,2・・・と入れてみた。
これについては後に出てくる「削除」のときの説明で触れようと思う。

これでアイテムの格納は終わり。実行してみると以下のようになる。

第1回の 1)でのチェック項目や、2)のスタイル設定を色々変えて実行してみるのだ。

以下、ウィンドウ作成時のソースまとめ(ここでは見にくいがコメントは取らないでおいた)
/*ウィンドウ作成時*/
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
    'リストビュー初期設定
    hList = GetDlgItem( hMainWnd, ListView1 )    'リストビューのハンドルを取得
    SendMessage( hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0,
            LVS_EX_GRIDLINES or LVS_EX_FULLROWSELECT or LVS_EX_FLATSB )   'スタイル設定

    'カラム初期設定
    Dim clm As LVCOLUMN 'リストビューカラム構造体
    Dim i As Long
    Dim buf As String
    clm.mask = LVCF_FMT or LVCF_WIDTH or LVCF_TEXT  'マスクの設定(書式と幅と文字を弄るよ)
    clm.fmt = LVCFMT_LEFT           'カラムの書式(左詰でお願いします)
    clm.cx = 100                    'カラムの幅(とりあえず100で)
    For i = 0 to 2
        buf = "カラム" + Str$( i )
        clm.pszText = StrPtr( buf ) 'カラムに表示する文字
        SendMessage( hList, LVM_INSERTCOLUMN, i, VarPtr(clm) As Long) 'カラム作成
    Next
    Dim lvi As LVITEM   'リストビューアイテム構造体
    For i = 0 to 5
        lvi.mask = LVIF_TEXT or LVIF_PARAM  'マスクの設定(アイテムの文字と、固有32ビット値を弄るよ)
        lvi.lParam = i                      '固有32ビット値(とりあえず 0 )
        lvi.iItem = i                       'インデックス(縦方向)の位置
        lvi.iSubItem = 0                    'サブアイテム位置(横方向)、アイテム(先頭)を参照する場合は 0
        buf = "アイテム" + Str$( i )
        lvi.pszText = StrPtr( buf )         'レコード挿入時のアイテムの内容
        SendMessage( hList, LVM_INSERTITEM, 0, VarPtr(lvi) As Long) 'アイテム(つかアイテムの入ったレコード)を挿入
        'サブアイテムを格納してみる
        lvi.mask = LVIF_TEXT                'マスクの設定
        lvi.iSubItem = 1                    'カラム(横方向)位置
        buf = "サブアイテム" + Str$( 5 - i )
        lvi.pszText = StrPtr( buf )         'レコード挿入時の先頭アイテムの内容
        SendMessage( hList, LVM_SETITEM, 0, VarPtr(lvi) As Long)    'アイテムを格納
    Next
End Sub

コメントの投稿

管理者にだけ表示を許可する

コメント

プロフィール

nakami

Author:nakami
可愛いテンプレートに似合う俺
うそAチームのスミス大佐

NAVI
カテゴリー
最近の記事
リンク
FC2カウンター
ブログ内検索
RSSフィード
sponsored link