[英]In WinForms .NET C#, how to save to disk the state of a TreeView control
[英]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.