簡體   English   中英

如何設置TreeView控件的背景圖像? (VS 2008 / .Net 3.5 / C#/ WinForms)

[英]How to set the background image of a TreeView Control? (VS 2008/.Net 3.5/C#/WinForms)

我一直在做一些研究,除非我開始深入研究InterOperabilty(即PInvoke),否則這似乎是不可能的。 我要發布此問題,因為我想知道是否有人設法做到了嗎?

我對所有圖像都使用.png並請專業人員提供圖像,因此我知道這些圖像具有最佳質量和最合適的格式。

似乎標准樹視圖控件不直接支持背景圖像,因此也不允許將其背景色設置為透明嗎? 有人對這兩個有任何想法嗎?

如果您願意使用第三方庫,請訪問http://objectlistview.sourceforge.net/cs/index.html-但是請注意,它是GPL。 在此處輕松設置背景圖片。

這可以通過覆蓋WndProc()並捕獲WM_ERASEBKGND消息來實現。 下面顯示的控件將執行此操作。 但是,您將很快找出Windows Forms TreeView類為什么不執行此操作的原因。 啟用“平滑滾動”系統選項后,您會看到非常難看的工件。 更不用說缺乏節點文本透明度了。 不,沒有解決方案,只有完全替換不依賴於本機Windows控件的控件才能解決此問題。 不是你通常應該考慮的,除非它是一個非常著名的組件供應商。

using System;
using System.Drawing;
using System.Windows.Forms;

class MyTreeView : TreeView {
    private Image mImage;
    public Image Image {
        get { return mImage; }
        set { mImage = value; Invalidate(); }
    }
    protected override void OnAfterCollapse(TreeViewEventArgs e) {
        if (mImage != null) Invalidate();
        base.OnAfterCollapse(e);
    }
    protected override void OnAfterExpand(TreeViewEventArgs e) {
        if (mImage != null) Invalidate();
        base.OnAfterExpand(e);
    }
    protected override void WndProc(ref Message m) {
        base.WndProc(ref m);
        if (m.Msg == 0x14 && mImage != null) {
            using (var gr = Graphics.FromHdc(m.WParam)) {
                gr.DrawImage(mImage, Point.Empty);
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM