• 締切済み

TreeViewのスクロール制御

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を設定すると問題なくできるのですが、どなたか分かる方がいましたら宜しくお願い致します。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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の引数に何を与えるのかは 適宜修正してください

関連するQ&A