エクスプローラのツリービュー

解決


ひる  2011-06-23 10:01:36  No: 72766  IP: 192.*.*.*

VC2008でダイアログにツリービューを置いています。

XPのエクスプローラのツリービューは、
テキスト以外の部分をクリックしてもその行のアイテムが選択されますが、
この動作は標準のプロパティには用意されていないものなのでしょうか?

「Full Row Select」というものを有効にするとそれに近い動作にはなりますが、
文字通り行全体が選択され、展開状態の線が出なくなってしまいます。

編集 削除
仲澤@失業者  2011-06-23 14:14:17  No: 72767  IP: 192.*.*.*

>この動作は標準のプロパティには用意されていないものなのでしょうか?

いません。
エクスプローラのツリービューはサブクラス化されています。
おそらくサブクラスの中で、マウス位置から相当するアイテムを
算定して、選択状態にしているのではないかと想像できます。
サブクラス化に慣れているのなら、特に問題なく実装できるのでは
ないでしょうか。

編集 削除
翔泳幹夫  2011-06-23 17:54:12  No: 72768  IP: 192.*.*.*

コレ面白いぞ。

Option Strict On
Option Explicit On
Option Infer Off

'VisualBasic2010(無料版)_ニセ物に注意。
'コレ面白いよ。
'こんな感じの人はいますかね?(笑)
'次回は{{ウイルスぱすた-2010をつくろう。(笑)


Public Class Form1

    Dim Test_WebBrowser As New WebBrowser
    Dim text_Box1 As New TextBox

    Sub cont_set()

        With Me
            .Size = New Size(700, 700)
            .Text = "Reo Internet Explorer"
        End With


        With Test_WebBrowser
            .Size = New Size(Width - 60, Height - 60)
            .Location = New Point(30, 30)
            .Navigate(New Uri("http://www.koei.co.jp"))
        End With

        Me.Controls.Add(Test_WebBrowser)

        With text_Box1
            .Size = New Size(Width - 50, 20)
            .Location = New Point(0, 0)
            .Text = "http://www.google.co.jp"
            .Enabled = False
        End With

        Me.Controls.Add(text_Box1)

    End Sub

    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        Test_WebBrowser.Size = New Size(Width - 60, Height - 60)
    End Sub


    Public Sub New()

        ' この呼び出しはデザイナーで必要です。
        InitializeComponent()

        ' InitializeComponent() 呼び出しの後で初期化を追加します。

        cont_set()

    End Sub

End Class

編集 削除
ひる  2011-06-27 09:42:06  No: 72769  IP: 192.*.*.*

仲澤さんありがとうございます。
CTreeCtrlの派生クラスを作って挑戦してみます。

エクスプローラ側がわざわざサブクラス化するくらい機能の必要性を感じたなら、
MS自身で標準のツリーコントロール側に組み込んでもらいたかったです。

編集 削除
仲澤@失業者  2011-06-27 09:48:53  No: 72770  IP: 192.*.*.*

MSがサブクラス化する理由の大半はバグ対策であるとの印象です。
また、一度サブクラスにすると、元に戻すのタイミングを失うことが
多いようです。

編集 削除