VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -