C 輕鬆實現對窗體(Form)換膚

2021-05-06 17:03:57 字數 1705 閱讀 9885

本來只是想收藏下該文章,但是自己也非常有興趣,就**原文,方便繼續研究,原文和作者都有表注了,我還是很尊重作者的,呵呵。

一直想寫乙個比較完整的、容易擴充套件的窗體換膚的方案,由於時間問題,都沒去實現這個想法。現在有朋友提出需要,就把以前寫的重新拿出來看了一篇,花了些時間,做出了現在的這個換膚的方案。實現的過程中遇到了不少問題,但還是解決了,雖然也許還有些缺陷,但也算是比較完善了。現在只實現了完全**繪製的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 ...