VB6.0を使用しています。
リストビューコントロールにサブアイテムを10個もつアイテムがあります。
各々のサブアイテムが表示しきれないときに、ツールチップを表示したいのですが、
今はMouseMoveイベント時にHitTestプロパティを見て、座標を取得しリストビューの行列を割り出しています。
この処理ですと、横スクロールした時でもHitTestの x はスクロール前の座標を返してしまい、
サブアイテムの位置が正しく取得できません。
横スクロールした時の移動値を取得する方法はないでしょうか?
宜しくお願いします。
Win32 APIでよければ、
LVM_SUBITEMHITTESTメッセージをSendMessageすると、
アイテムとサブアイテムの各インデックスが得られると思います。
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
ツイート | ![]() |