リストビューで横スクロールした時のマウスカーソルがどの列にあるかを知るには?

解決


ABC  2005-03-24 22:24:43  No: 120427

VB6.0を使用しています。

リストビューコントロールにサブアイテムを10個もつアイテムがあります。
各々のサブアイテムが表示しきれないときに、ツールチップを表示したいのですが、
今はMouseMoveイベント時にHitTestプロパティを見て、座標を取得しリストビューの行列を割り出しています。

この処理ですと、横スクロールした時でもHitTestの  x  はスクロール前の座標を返してしまい、
サブアイテムの位置が正しく取得できません。

横スクロールした時の移動値を取得する方法はないでしょうか?

宜しくお願いします。


eg  2005-03-25 03:22:19  No: 120428

Win32 APIでよければ、
LVM_SUBITEMHITTESTメッセージをSendMessageすると、
アイテムとサブアイテムの各インデックスが得られると思います。


ABC  2005-03-25 23:23:40  No: 120429

egさん  ありがとう御座います。
>LVM_SUBITEMHITTESTメッセージをSendMessageすると、
>アイテムとサブアイテムの各インデックスが得られると思います。

Webでいろいろ検索したのですが、いまいち使い方が分かりませんでした。。。

変わりに、GetScrollPosというAPIを見つけ、望んでいた処理が出来ました。

Public Declare Function GetScrollPos Lib "user32" (ByVal hwnd As Long, ByVal nBar As Long) As Long

Public Const SB_HORZ = 0 'ウィンドウの水平スクロール バーの位置を取得します。
Public Const SB_VERT = 1 'ウィンドウの垂直スクロール バーの位置を取得します。
Public Const SB_CTL = 2  'スクロールバーコントロールの位置を取得。hwndパラメータはスクロールバーコントロールのウィンドウハンドルになります。

dim lngOffset as Long

'これで横スクロール量が取得できます。
'この値にマウス位置をプラスすればリストビュー内の位置が分かります。
lngOffset = GetScrollPos(ListView1.hwnd, SB_HORZ) * Screen.TwipsPerPixelX


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加