投稿日 | : 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