VC2008でダイアログにツリービューを置いています。
XPのエクスプローラのツリービューは、
テキスト以外の部分をクリックしてもその行のアイテムが選択されますが、
この動作は標準のプロパティには用意されていないものなのでしょうか?
「Full Row Select」というものを有効にするとそれに近い動作にはなりますが、
文字通り行全体が選択され、展開状態の線が出なくなってしまいます。
>この動作は標準のプロパティには用意されていないものなのでしょうか?
いません。
エクスプローラのツリービューはサブクラス化されています。
おそらくサブクラスの中で、マウス位置から相当するアイテムを
算定して、選択状態にしているのではないかと想像できます。
サブクラス化に慣れているのなら、特に問題なく実装できるのでは
ないでしょうか。
コレ面白いぞ。
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
仲澤さんありがとうございます。
CTreeCtrlの派生クラスを作って挑戦してみます。
エクスプローラ側がわざわざサブクラス化するくらい機能の必要性を感じたなら、
MS自身で標準のツリーコントロール側に組み込んでもらいたかったです。
MSがサブクラス化する理由の大半はバグ対策であるとの印象です。
また、一度サブクラスにすると、元に戻すのタイミングを失うことが
多いようです。
ツイート | ![]() |