投稿時間:2003/04/24(Thu) 11:09 投稿者名:しんじ
Eメール:
URL :
タイトル:LISTVIEWのColumnHeaderの高さの取得方法
いつもお世話になっております。 LISTVIEWコントロールでダブルクリックでListitemを取得する ルーチンを作成しているのですが、ColumnHeaderの高さの取得がわかりません。
ListViewの位置は FORM → FRAME2の中に入れていますので FRAMEのLEFTとTOPが計算に入っています。
下記のコードでも動作はしているのですがダブルクリック時のITEM取得の精度が 今ひとつ良くありません。 (ColumnHeaderの高さがきちんと入っていないのであたりまえですが....) MSDNでColumnHeaderオブジェクトなども調べましたがHeightプロパティが無く 困っています。
WEBなども検索しましたが、サブクラス化以外に取得方法が載っていませんでした。
制約的に LISTVIEWはlvwReportで必ず表示しColumnHeaderも必ず表示します。
ですので単純にColumnHeaderの高さえ取得できれば問題ないです。 環境はVB6.0 SP5 +Win2000です。
お手数おかけ致しますがお分かりになる方教えてください。
Private Sub ListView1_DblClick() Dim dpoint As POINTAPI Dim LItem As ListItem On Error Resume Next '--LITEMがNothing時のエラー発生防止 '--APIの読み出し GetCursorPos dpoint '--構造体に値を格納 x = dpoint.x - ScaleX(Me.Left + ListView1.Left + Frame2.Left, vbTwips, vbPixels) y = dpoint.y - ScaleY(Me.Top + ListView1.Top + Frame2.Top, vbTwips, vbPixels)
'↓解決したい個所 y = y - 28 '-- この引いた高さ28が大体のColumnHeaderの高さだと思われる
Set LItem = ListView1.HitTest(ScaleX(x, vbPixels, vbTwips), _ ScaleY(y, vbPixels, vbTwips)) If LItem Is Nothing Then Exit Sub If ListView1.View = lvwReport Then MsgBox LItem End If End Sub
--BAS1の宣言
'--POINTAPI構造体の宣言 Type POINTAPI x As Long y As Long End Type
'--GetCursorPosの宣言 Public Declare Function GetCursorPos Lib "user32" _ (lpPoint As POINTAPI) As Long
|