プロが教える店舗&オフィスのセキュリティ対策術

VB6でTreeViewコントロールのスクロールをプログラム側から制御する物を作っているのですが分からなくて困っています。
TreeViewでNodeが増えれば自動的に表示されるスクロールバーは表示をしないように「Scrollプロバティ」にFalseを入力してSendMessageで下記の方法で行ったのですがスクロールしません。

Private Sub Command1_Click()
Call SendMessage(TreeView1.hwnd, WM_VSCROLL, MAKEWPARAM(SB_THUMBPOSITION, sPos), 0)
End Sub

Private Function MAKEWPARAM(LOWWORD As Long, HIWORD As Long) As Long
MAKEWPARAM = (LOWWORD And &HFFFF&) Or (HIWORD * &H10000)
End Function

「Scrollプロパティ」にTrueを設定すると問題なくできるのですが、どなたか分かる方がいましたら宜しくお願い致します。

A 回答 (1件)

WM_SCROLLでは上手くいかないようですので



SetWindowLong/GetwindowsLongで TreeViewのウィンドウスタイルに
WM_VSCROLLを追加します
TreeViewのScrollを Trueにします
Private Const GWL_STYLE = (-16)
Private Const WS_VSCROLL = &H200000

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

FormのLoadイベントなどで
dim style as long
style = GetWindowLong( TreeView1.hWnd, GWL_STYLE)
SetWindowLong TreeView1.hWnd, GWL_STYLE, style or WS_VSCROLL
' ScrollをTrueにしてもスクロールバーは表示されません
TreeView1.Scroll = True

VScrollコントロールのChangeイベントで
if TreeView1.Nodes( VScroll1.Value).visible = false then
TreeView1.Nodes( VScroll.Value).EnsureVisible
end if
といった具合にすると スクロールしますよ
Nodesの引数に何を与えるのかは 適宜修正してください
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!