本來只是想收藏下該文章,但是自己也非常有興趣,就**原文,方便繼續研究,原文和作者都有表注了,我還是很尊重作者的,呵呵。
一直想寫乙個比較完整的、容易擴充套件的窗體換膚的方案,由於時間問題,都沒去實現這個想法。現在有朋友提出需要,就把以前寫的重新拿出來看了一篇,花了些時間,做出了現在的這個換膚的方案。實現的過程中遇到了不少問題,但還是解決了,雖然也許還有些缺陷,但也算是比較完善了。現在只實現了完全**繪製的skinformprofessionalrenderer,接下來有時間會寫乙個skinformimagerenderer,實現只要做好就可以換膚。
看完效果,來看看skinform的實現原理:
1、
把form設定為無標題欄視窗。
2、為了使form可以像標準的windows窗體那樣擁有系統選單和拖動改變窗體大小,加入
ws_thickframe
和ws_sysmenu窗體樣式。 3、
處理相應得窗體訊息,實現窗體的標準操作。 4、
實現skinformrenderer,繪製窗體的標題欄、邊框、按鈕等。
原理只做簡單介紹,要詳細說明,那得寫很多東西了,介紹一下skinform中加入的幾個屬性的功能:
1、borderwidth
,設定或獲取窗體的邊框的寬度。
2、canresize
:設定或獲取窗體是否可以改變大小。
3、captionfont
:設定或獲取窗體標題的字型。
4、capntionheight
:設定或獲取窗體標題欄的高度。
5、closeboxsize
:設定或獲取關閉按鈕的大小。
6、minimizeboxsize
:設定或獲取最小化按鈕的大小。
7、maximizeboxsize
:設定或獲取最大化(還原)按鈕的大小。
8、controlboxoffset
:設定或獲取控制按鈕的偏移。
9、controlboxspace
:設定或獲取控制按鈕的間距。
10、roundstyle
:設定或獲取窗體的圓角樣式。
11、radius
:設定或獲取窗體的圓角的大小。
12、renderer
:設定或獲取窗體的繪製方法。
接下來介紹窗體的繪製類skinformrenderer,這是比較重要的類,它是乙個抽象類,重寫它裡面的繪製方法,就可以得到新的窗體**。這個類裡面主要有幾個抽象方法:
1、createregion
:建立乙個region,提供給skinform使用。
2、onrenderskinformcaption
:繪製窗體標題欄。 3、
onrenderskinformborder
:繪製窗體邊框。 4、
onrenderskinformbackground
:繪製窗體背景。 5、
onrenderskinformcontrolbox
:繪製窗體控制按鈕(最小化、最大化、關閉); 看看
skinformrenderer
的完整**:
出處:cs 程式設計師之窗 http://www.csharpwin.com
。你可以免費使用或修改提供的源**,但請保留源**中的版權資訊,詳情請檢視:
cs程式設計師之窗開源協議 http://www.csharpwin.com/csol.html
。
輕鬆實現C 窗體無外邊框移動
剛畢業的小白乙個,最近在接手乙個專案,要在c 中使用dotnetbar來搭建窗體介面,所以要去除外邊框,但是去除外邊框後就不能移動窗體了,還是比較麻煩的。在網上查詢了好久的資料,有很多大神用了很多種方法來實現,當然鑑於本人是小白乙個,所以都不採用,看不懂。最後還是很小幸運的找到了 首先新增引用,並宣...
c 實現Form窗體始終在桌面最前端顯示
方法一 呼叫api system.runtime.interopservices.dllimport user32 charset system.runtime.interopservices.charset.auto,exactspelling true public static extern ...
c 實現Form窗體始終在桌面最前端顯示
方法一 呼叫api system.runtime.interopservices.dllimport user32 charset system.runtime.interopservices.charset.auto,exactspelling true public static extern ...