データ表示用としてのリストビューを生成(RADツールは使用しない)
し,任意の列(コラム)が押された時にその列番を知りたいのですが,
列番引数データ(NM_LISTVIEW構造体のiSubItem)が固定データから変
化してくれません。
BackSearchABや“猫でも分かる~”などにいくつかのヒントがあり,
コラムのボタンタイミングから,上記構造体のバッファへlParamをコピー
して読み出していますが,旨く取り込めていないようです。
親ウィンドウのプロシージャ内に以下のコードを置き,コラムボタンの
クリックタイミングでデータを取り込んでいます。
クリックタイミング(Case LVN_COLUMCLICK)の確認は正常に動作。
なお選択された行番号も取り込んでいますが,これは“コードの切れ端”
におけるhira様の投稿を参照しており,勿論ちゃんと読み込めています。
<ご質問内容>
1)考え方に基本的な間違いがありますか。
2)もしあるとすればそのご指摘をお願い致します。
3)特別な関数(マクロ)など他の方法はありますか。
Case WM_NOTIFY
itemcn = FindSelListItem(hListViewWnd(1))
If wParam = ID_ListView(1) Then
memcpy(VarPtr(lvdispinfo), lParam, Len(lvdispinfo))
End If
Select Case (lvdispinfo.hdr.code)
Case LVN_COLUMNCLICK
memcpy(VarPtr(nmlistview), lParam, Len(nmlistview))
subitemcn = (nmlistview.iSubItem)
End Select
リストビューのコラムクリックからの任意列番の取り込み方法
Re: リストビューのコラムクリックからの任意列番の取り込み方法
If wParam = ID_ListView(1) Then列番引数データ(NM_LISTVIEW構造体のiSubItem)が固定データから変
化してくれません。
を
If LOWORD(wParam) = ID_ListView(1) Then
に代えてみてください。
あと、コラム→カラムだと思います。
(いつものように)蛇足ですが、最初上記のLOWORDに気付かずに書いてしまったコードを、せっかくなので載せておきます(^^;)
コード: 全て選択
Case WM_NOTIFY
Dim nmHdr As NMHDR
Dim nmListView As NMLISTVIEW
Select Case LOWORD(wParam)
Case ID_ListView
memcpy( VarPtr(nmHdr), lParam, Len(nmHdr) )
Select Case nmHdr.code
Case LVN_COLUMNCLICK
memcpy( VarPtr(nmListView), lParam, Len(nmListView) )
debug
End Select
End Select
NM_LISTVIEW構造体のiItemにIndex番号(行番号)、iSubItemにカラム番号(列番号)が入ると思います。
まぁ、一気に行列の情報を得る例、ってことで^^;
(RADのコピペなんですけどね/爆)
リストビューのカラムクリックからの任意列番の取り込み方法
あーっと,やっぱり淡幻星さんのお世話になってしまいました。
例によって一発で完了です。
何事も先人は賢人ということで,淡幻星さんを含め皆さんのサポートが良い
ので非常に助かります。
この後聞くにしても,一定レベルまで自分で考えてから聞くように心がけ
ますので,宜しくお願い致します。
これでリストビューもRADの手を借りずに,かなり操作が可能になりました。
例によって一発で完了です。
何事も先人は賢人ということで,淡幻星さんを含め皆さんのサポートが良い
ので非常に助かります。
この後聞くにしても,一定レベルまで自分で考えてから聞くように心がけ
ますので,宜しくお願い致します。
これでリストビューもRADの手を借りずに,かなり操作が可能になりました。