VistaスタイルのTreeView

過去のブログのアーカイブ
この記事は前身のブログのアーカイブを引き継いだものです. 画像が正しく表示できないなど,コンテンツの表示に問題がある恐れがあります.

NET環境で標準のTreeViewを使用したらVista以降のPCでもXPスタイルで表示される。
ちょこちょこっといじればVista風のスタイルになるらしいのでそのまとめ

ついでにXPスタイルとVistaスタイルの違いはこんな感じ

tree-xptree-vista

 
そこまで大きな違いがあるというわけではないのですが、古臭いソフトというイメージを持たれるぐらいならいいかなと。

ソースコード

[ToolboxBitmap(typeof(TreeView))]
public class TreeView : System.Windows.Forms.TreeView
{
    [DllImport("uxtheme.dll", CharSet = CharSet.Unicode)]
    private static extern int SetWindowTheme(IntPtr hWnd, string pszSubAppName, string pszSubIdList);
    [DllImport("user32.dll")]
    private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
    public TreeView()
    {
        base.HotTracking = true;
        base.ShowLines = false;
    }
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.Style |= 32768;
            return cp;
        }
    }
    [Browsable(false)]
    private new bool HotTracking
    {
        get
        {
            return base.HotTracking;
        }
        set
        {
            base.HotTracking = true;
        }
    }
    [Browsable(false)]
    private new bool ShowLines
    {
        get
        {
            return base.ShowLines;
        }
        set
        {
            base.ShowLines = false;
        }
    }
    protected override void OnHandleCreated(EventArgs e)
    {
        base.OnHandleCreated(e);
        SetWindowTheme(base.Handle, "explorer", null);
        int style = SendMessage(base.Handle, 4397, 0, 0);
        style |= 100;
        SendMessage(base.Handle, 4396, 0, style);
    }
}

VistaスタイルにするとHotTrackingやShowLinesは意味なくなるので隠しています。