Winform控件優(yōu)化之圓角按鈕2_第1頁
Winform控件優(yōu)化之圓角按鈕2_第2頁
Winform控件優(yōu)化之圓角按鈕2_第3頁
Winform控件優(yōu)化之圓角按鈕2_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第Winform控件優(yōu)化之圓角按鈕2//不能使用e.ClipRectangle.GetRoundedRectPath(_radius)計算控件全部的Region區(qū)域,e.ClipRectangle似乎是變化的,必須使用固定的Width和Height,包括下面的繪制也不能使用e.ClipRectangle

//在Paint事件中也不推薦使用e.ClipRectangle時沒問題的

RectanglecontrolRect=newRectangle(0,0,this.Width,this.Height);

//roundRadius修改回來是要還原

if(roundRadius=0regionNewModel)//圓角下創(chuàng)建新Region模式,使用自定義Region

varcontrolPath=controlRect.GetRoundedRectPath(roundRadius);

//要在繪制之前指定Region,否則無效

this.Region=newRegion(controlPath);

else//修改對應(yīng)調(diào)整

//this.Region=newRegion(controlRect);//也屬于重新修改

this.Region=originRegion;

if(roundRadius=0)

Rectanglerect;

if(enableBGGradient)

rect=e.Graphics.DrawRoundRectAndCusp(controlRect,roundRadius,beginBGColor,endBGColor,true,CuspAlign,gradientModel,roundBorderWidth0newPen(roundBorderColor,roundBorderWidth):null);

else

ColorbaseColor;

switch(mouseControlState)

caseMouseControlState.Hover:

baseColor=this.roundHoverColor;

break;

caseMouseControlState.Pressed:

baseColor=this.roundPressedColor;

break;

caseMouseControlState.Normal:

baseColor=this.roundNormalColor;

break;

default:

baseColor=this.roundNormalColor;

break;

rect=e.Graphics.DrawRoundRectAndCusp(controlRect,roundRadius,baseColor,showCusp,cuspAlign,roundBorderWidth0newPen(roundBorderColor,roundBorderWidth):null);

//使用合適的區(qū)域

e.Graphics.DrawText(rect,Text,ForeColor,Font,TextAlign);

}

測試擴展按鈕控件ButtonPro

通過拖拽ButtonPro按鈕控件,調(diào)整各個參數(shù),查看不同樣式的按鈕效果。

TextRenderer.DrawText繪制文本

文本垂直居中偏上的問題及文字大小不正確【推薦使用TextRenderer.DrawText繪制文本】

所有的一切都非常好,但是,目前還有一個小問題,就是繪制垂直居中的文本時,可以明顯看到偏上方。是的由此產(chǎn)生瑕疵。

目前沒有找到很好的解決辦法,更換字體、字體大小為偶數(shù)會有一定效果,但并不能完全解決。

使用StringFormat.GenericTypographic

后面經(jīng)過花木蘭控件庫的大佬提醒,使用StringFormat.GenericTypographic作為文本繪制的格式對象,可以看到偏上的問題有了明顯改善。

using(StringFormatstrF=StringFormat.GenericTypographic)

//文字布局

switch(_textAlign)

//...

g.DrawString(text,font,brush,rect,strF);

}

雖然如此,但是還是有一點點不完全垂直。而且對比同樣字體情況下,DrawString繪制出來的文本明顯和原生Button時顯示的文字有很大差別(大小、清晰度)

僅僅重寫OnPaintBackground

【無效果】

后面由于文字繪制的問題,想著直接重寫OnPaintBackground,文字交由Winform自己繪制,應(yīng)該可以達到很好的效果。

但是,但是重寫OnPaintBackground后背景沒有任何效果,僅僅是設(shè)置的透明背景,無法實現(xiàn)圓角等各種繪制。

目前暫時不知道該如何正確的處理OnPaintBackground方法。

使用TextRenderer.DrawText繪制文本

【不推薦Graphics.DrawString】

后來幾乎要放棄了,因為最終繪制的文字確實很不理想,和原生Button對比起來差好多。。。

然后想著測試下TextRenderer.DrawText()繪制文本的效果如何,最終發(fā)現(xiàn)文字繪制效果非常好(大小正確、清晰),重點是文字位置的水平和垂直居中沒有任何問題,基本和原生Butto

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論