TREEVIEWコントロールのスタイル拡張について


[コメントツリー表示を見る] [発言時刻順表示を見る]

Posted by saito on 1998/10/23 09:43:26

    VB初心者友の会でTREEVIEWについて質問を出した
    齋藤です。はじめまして。

    私の質問に対してさっそくUzさんからフォロー頂きまして
    ありがとうございます。

    ところで1つ質問が有ります。

    私が作成したTREEVIEWにチェックボックスを
    付加するコードから
    Uzさんが作成したチェックボックスのチェックが
    ONOFFの判断をするコードを
    NODEがクリックしたときに呼び出したいのですが
    NODEがクリックされた時にそのノードのハンドル?を
    取得してUzさんのコードに引数として渡す
    渡し方がわかりません。

    どうすればよいのでしょうか?
    もしかして簡単なことかもしれませんがAPI初心者なもので
    思い付きません。
    以下に私の作成したコードとUzさんの投稿なされたコードを
    掲載いたしますのでどうかよろしくお願いいたします。
    (無断でUzさんのコードを転載することをお許しください)

    私の作ったコード(TREEVIEWにチェックボックスを
    付加するコード)
    −−−−ここから−−−−
    Option Explicit

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

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

    Private Const GWL_STYLE = (-16)

    Private Const TVS_CHECKBOXES = &H100
    Private Const TVS_FULLROWSELECT = &H1000
    Private Const TVS_1 = &H200

    Private Sub Form_Load()
    Dim NodeX As Node
    Dim LstIm As ListImage
    Dim pa As String
    Dim i As Integer, j As Integer
    Dim strX As String
    Dim st As Long
    Dim ret As Long

    With ImageList1
    .ImageHeight = 16
    .ImageWidth = 16
    'pa = "C:\Programfiles _
    \DevStudio\Vb\Graphics\Bitmaps\Outline\"

    Set LstIm = .ListImages.Add(, "Open", LoadPicture(pa & "Open.bmp"))
    Set LstIm = .ListImages.Add(, "Close", LoadPicture(pa & "Closed.bmp"))
    .MaskColor = vbWhite
    End With

    With TreeView1
    .Style = tvwTreelinesPlusMinusText

    .Indentation = 300
    .ImageList = ImageList1

    Set NodeX = .Nodes.Add(, , "Root", "Root", "Close", "Open")
    For i = 1 To 3
    strX = "Child" & CStr(i)
    Set NodeX _
    = .Nodes.Add("Root", tvwChild, strX, strX, "Close", "Open")
    For j = 1 To 3
    strX = "LittleChild" & CStr(i) & CStr(j)
    Set NodeX = _
    .Nodes.Add("Child" & i, tvwChild, strX, strX, "Close", "Open")
    NodeX.EnsureVisible
    Next j
    Next i
    End With

    st = GetWindowLong(TreeView1.hwnd, GWL_STYLE)
    st = st Or TVS_FULLROWSELECT Or TVS_CHECKBOXES
    ret = SetWindowLong(TreeView1.hwnd, GWL_STYLE, st)
    End Sub
    −−−−ここまで−−−−

    Uzさんのコード
    −−−−ここから−−−−
    Public Function IsTVItemChecked(hwndTV As Long, hItem As Long) As Boolean
    Dim tvi As TVITEM
    With tvi
    .mask = TVIF_STATE
    .hItem = hItem
    .stateMask = TVIS_STATEIMAGEMASK
    End With
    Call TreeView_GetItem(hwndTV, tvi)
    IsTVItemChecked = (tvi.state And INDEXTOSTATEIMAGEMASK(IIL_CHECKED))
    End Function
    −−−−ここまで−−−−


記事スレッド一覧