2010-08-14 65 views
3

使用C#winforms,我想創建看起來像真正的自定義控件。視覺樣式獨立繪圖

有很多類,可用於繪製看起來像以假亂真控制:ControlPaintVisualStyleRendererButtonRenderer,,ComboBoxRendererGroupBoxRendererProgressBarRendererRadioButtonRendererScrollBarRendererTabRendererTextBoxRendererTextRendererToolStripProfessionalRendererToolStripRendererToolStripSystemRendererTrackBarRenderer

考慮視覺風格時會出現問題:我想成爲獨立的視覺風格。含義:如果用戶允許視覺樣式,我不在乎,我希望它能夠工作。如果用戶啓用視覺樣式,我想使用視覺樣式繪製它,否則我想繪製它沒有視覺樣式。

通過MSDN文檔,唯一可視風格獨立的類是ButtonRenderer,,GroupBoxRendererRadioButtonRenderer。這意味着對於其他所有情況,如果啓用視覺樣式並使用不同的代碼繪製零件,我需要檢查自己。

假設我想繪製一個Tab控件部分我自己。 TabRenderer類具有所有需要的功能,但它只適用於用戶啓用的視覺樣式。否則我需要使用ControlPaint類來繪製,但它使用完全不同的模型,沒有ControlPaint.DrawTab()方法或類似的東西,我需要弄清楚我需要繪製哪些矩形類型,因此它看起來像一個真正的選項卡。這很煩人。

內置控件(包括Tab控件)已具有使用或不使用視覺樣式繪製自己的功能。爲什麼不向微軟公開自定義控件創作者的這個功能?爲什麼自定義控件創作者應該受到影響?

回答

0

不幸的是,這是一個痛苦,但這是編寫自定義控件的成本。我見過微軟在許多WinForm控件中做這件事的方法是檢查Application.RenderWithVisualStyes和Control.UseVisualStyleBackColor。根據這些值,他們將相應地繪製控件。

他們使用的常見模式是創建名爲MyControlRenderer.cs的內部類。在這個渲染器裏面是魔術實際發生的地方。如果你看看.NET REF代碼,你會發現它們也使用System.Windows.Forms.VisualStyles命名空間中的VisualStyleRenderer類,並且還有一些實際的代碼。

您將需要利用這些不同類別和工具的組合,以及您自己的工作組合。在沒有視覺樣式的情況下在機器上測試您的控件。

當我希望下班回家時,我會多發一點。

+0

你的名字響了。您是否曾經發布到MSDN論壇?希臘字母? – 2010-08-18 21:31:02

+0

是的,很久沒有見到nobugz:D – 2010-08-19 02:42:04