前一篇給窗體設定了region,將窗體的formborderstyle設定成了none,然後修改了窗體的顯示區域region。乙個本來完好的窗體讓我們設定成為了乙個空白的沒有任何色彩的窗體,這對我們的介面開發好像是背到而行,有點南轅北轍了。其實不然,只有將窗體上的所有原有的資訊給去除掉,才能還原窗體的本來面貌,給窗體乙個新面貌。
這篇就對窗體的介面開發設計乙個新面貌。
我在介面開篇的開篇就已經說過,介面開發其實就是修改窗體的兩個區域,client area和none client area,如下圖:
而我們現在已經將窗體修改成了沒有任何資訊的窗體,如下圖:
現在我們要做的,就是在這個什麼都沒有的圖上新增上我們自己的介面,將窗體的client area和none client area從新繪製讓其有新的面貌。而他的繪製確實需要很多的gdi+知識。
client area的繪畫很簡單,主要就是對窗體的背景色進行修改,這個對於c#開發人員就是一句話的事情,設定窗體的背景色就可以了。**如下:
this
._parentform.backcolor
=this
._engine.skincolor.back;
但是,對於none client area的繪畫就比較麻煩,他不僅僅畫的是顏色,還有窗體的標題欄、最大化、最小化、關閉按鈕、窗體圖示和窗體的邊框,接下來就是一一對窗體的進行繪畫。
窗體的標題欄分為兩大部分:窗體的圖示和窗體的標題,繪畫這些的第一步都是對窗體的繪畫區域的設定。找到繪畫的區域,然後使用gdi+進行繪畫,具體的過程就是這樣,**如下:
#region
ncpaint
//////
ncpaint
//////
///private
bool
ncpaint(skinningform form, skinengine engine)
//get caption bounds
rectangle captionbounds
=rectbounds;
captionbounds.height
=this
+this
//draw caption
this
._formisactive,
this
._engine);
//draw caption iconif(
this
._parentform.showicon
&&this
._parentform.icon
!=null)//
draw caption text
drawcaptiontext(g,
this
._parentform.text,
this
._parentform.font);
//draw caption button
drawcaptioncontrolbox(g);
//draw border
}catch
//cleanup data
if(hdc
!=(intptr)0)
if(region
!=null
&&hrgn
!=(intptr)0)
region.releasehrgn(hrgn);
if(region
!=null
)region.dispose();
if(g
!=null
)g.dispose();
return
result;
}#endregion
這個就完全繪製了窗體的邊框。介面效果如下:
繼承窗體的設計介面報錯 C
先設計了乙個窗體form1,後來一問改動小,又設計了乙個窗體form2,繼承的 為 public partial class form2 form1 但之後設計器之中產生了如下的錯誤 服務容器中已存在服務 system.windows.forms.design.ieventhandlerservic...
PHP開發APP介面(四) 單例模式
設計模式中最簡單的形式之一。這一模式的目的是使得類的乙個物件成為系統中的唯一例項。要實現這一點,可以從客戶端對其進行例項化開始。因此需要用一種只允許生成物件類的唯一例項的機制,阻止 所有想要生成物件的訪問。使用工廠方法來限制例項化過程。這個方法應該是靜態方法 類方法 因為讓類的例項去生成另乙個唯一例...
飛魚開發框架 四 窗體自動獲取使用者登入資訊
為了在整個專案中能夠方便的獲取登入後使用者的資訊,在飛魚框架中將使用者登入後的相關資訊儲存後可以通過窗體繼承no1.common.window.baseform這個窗體來獲取。使用的時候就像讀取全域性變數一樣方便,比如例子中需要獲取修改人的資訊,只需寫上userhelper.realname即可,非...