青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

c++初學者

專注技術開發

自繪按鈕補遺【轉】

《自繪按鈕的實現》一文中所示范的CXPButton按鈕從形狀上看可以說是一個不規則按鈕。我們把MFC中提供的控件成為標準控件,而其中的按鈕控件則可稱為規則按鈕,因為它是的形狀是一個規則的矩形。但是隨著流線型設計在界面設計中被廣泛采用,越來越多的程序設計者都樂意在自己的作品中加入一些非規則形狀的控件。以按鈕為例,最簡單的就到有圓形按鈕,三角按鈕等。下圖是一組定義好的圓形按鈕:



但是這些在我們眼中似乎呈現出不規則形狀的按鈕,有時候的表現卻不近乎人意。以之前設計的CXPButton為例,下面我們就來找找它的缺陷。我們把對話框的背景色改為其它顏色,看看會有什么效果。修改背景色的方法如下:為對話框類添加WM_ERASEBKGND消息,如果你在類向導中找不到該消息,請參考《自繪按鈕的實現》中介紹的方法,注意在添加對話框中要把Filter for messages available to設為Child Window才能在列表中看到WM_ERASEBKGND消息。我們在函數中添加繪制背景色的代碼:
BOOL CXPButtonDemoDlg::OnEraseBkgnd(CDC* pDC)
{
BOOL retValue= CDialog::OnEraseBkgnd(pDC);
CRect rc;
GetClientRect(&rc);
pDC->FillSolidRect(&rc,RGB(0,0,255));
return retValue;
}
編譯后運行程序,可以看到下面的效果,在按鈕的四個角上出現了難看的邊角,這就是我所說的缺陷了:



既然發現了問題,下面當然就是動手來解決問題的時間了。在《自繪按鈕的實現》一文中曾經講過,按鈕的繪制主要在DrawItem()函數中完成。這里要補充一點就是DrawItem()是MFC所提供的系統函數,所以可以通過下圖的方法添加。選擇Add Virtual Function…之后在彈出對話框左邊的列表中找到DrawItem,選擇Add and Edit即可。



好了,我們接著上面的話題。要解決按鈕顯示的“殘角”問題,在這里需要使用一個叫做CRgn的類,這個類在創建不規則控件的時候經常要用到,我們可以通過CRgn類來設置控件的有效區域。那么什么是有效區域呢?以圓形按鈕為例,MFC默認的按鈕形狀是矩形的,為了實現圓形按鈕的效果,我們希望能夠把原來矩形的四角裁剪掉,只保留中間的圓形區域。這種關系可以用下圖來表示:



圖中的A是原來的矩形區域,B是需要裁剪的區域,而C是有效區域。我們希望程序不要把B看作按鈕的一部分,當鼠標在B上面點擊的時候不要產生任何效果。設置按鈕的有效區域一般是在PreSubclassWindow()函數里面實現的:
void CXPButton::PreSubclassWindow()
{
CButton::PreSubclassWindow();
ModifyStyle(0, BS_OWNERDRAW);
//設置按鈕的有效區域
CRgn rgn;
CRect rc;
GetClientRect(&rc);
//有效區域為一個角半徑為5的圓角矩形
rgn.CreateRoundRectRgn(rc.left,rc.top,rc.right,rc.bottom,5,5);
SetWindowRgn(rgn,TRUE);
rgn.DeleteObject();
}
編譯后運行程序,我們發現盡管已經設置了按鈕的有效區域,但是問題還是沒有解決,這是為什么呢?前面我們曾經通過對話框的WM_ERASEBKGND消息函數來改變對話框的底色,其實按鈕也有它的WM_ERASEBKGND消息函數,它會使用系統顏色根據控件的默認形狀來繪制控件的底色。所以我們要重載按鈕的WM_ERASEBKGND消息函數,讓它什么都不做:
BOOL CXPButton::OnEraseBkgnd(CDC* pDC)
{
//禁止繪制底色
return TRUE;
}
再編譯一次,運行后發現,難看的"殘角"不見了:

 



《自繪按鈕的實現》一文中還講過在DrawItem()函數中應該先畫底色,其實這是有前提的,前提就是你已經知道了按鈕所在對話框所使用的背景色,你可以使用這個顏色作為按鈕的底色來進行填充。這樣即使程序會在WM_ERASEBKGND消息函數中使用系統顏色來繪制控件的底色,但是等到它執行DrawItem()的時候,馬上又會把之前的矩形底色覆蓋,從而不留痕跡地把“殘角”掩蓋掉。
在本篇開頭列舉的圓形按鈕中也有類似的問題,大家不防把它作為練習,看看是否能夠解決圓形按鈕中的“殘角”問題。我在本篇提供的練習程序中需要修改的地方會表明“提示”的字眼,大家可以先把源程序中有“提示”字眼的地方找出來,再根據提示的內容進行修改。



最后還要補充的是各位對CRgn類的關注。在VC中,要創建出各種復雜形狀的控件、窗口經常要依靠CRgn類的強大功能來實現。如果你想在界面設計這個環節更進一步的話,建議你抽點時間仔細研究一下Msdn中關于CRgn類的使用說明。如果你有什么好的使用經驗和心得,不防把相關資料發到我的郵箱。以后有機會的話我會專門寫一篇文章探討一下CRgn類的使用技巧的。

posted on 2008-09-25 20:19 大海 閱讀(576) 評論(0)  編輯 收藏 引用 所屬分類: VC++圖像

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲在线视频| 日韩一级成人av| 久久久久久亚洲综合影院红桃| 韩国久久久久| 欧美日韩国产美| 欧美aa在线视频| 欧美日韩国产高清视频| 欧美激情视频在线播放| 欧美精品在线看| 欧美视频在线一区| 一色屋精品视频在线看| 欧美在线视频一区二区| 久久av一区二区三区| 欧美福利电影网| 国产性猛交xxxx免费看久久| 国产亚洲网站| 一区二区高清在线| 国产亚洲欧洲一区高清在线观看| 午夜视频一区二区| 美女诱惑黄网站一区| 国产色产综合色产在线视频| 亚洲久久视频| 欧美激情成人在线视频| 香蕉久久夜色精品| 国产精品乱码妇女bbbb| 亚洲伦理自拍| 欧美激情精品久久久久久蜜臀| 亚洲欧美日韩国产一区| 亚洲丰满少妇videoshd| 亚洲一区二区三区色| 亚洲精选视频免费看| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲视频大全| 国产精品观看| 国产精品成人在线观看| 最新日韩av| 亚洲一区二区三区免费观看| 欧美精品综合| 欧美ab在线视频| 国产亚洲aⅴaaaaaa毛片| 久久色在线观看| 狠狠色综合播放一区二区| 国产精品欧美日韩久久| 国产伊人精品| 亚洲电影在线| 最新国产成人av网站网址麻豆| 欧美视频手机在线| 欧美日韩亚洲成人| 久久九九免费| 亚洲国产高清一区| 欧美一区二区三区在| 亚洲第一综合天堂另类专| 亚洲欧美精品在线观看| 久热国产精品| 欧美激情国产日韩| 欧美精品v日韩精品v韩国精品v| 欧美一级专区免费大片| aⅴ色国产欧美| 亚洲高清视频一区| 久久久久国产一区二区| 久久精品女人| 亚洲一区精品视频| 国产精品久久久免费| 亚洲一级特黄| 一区二区三区欧美视频| 午夜精品久久久久久久久久久久久 | 久久精品人人做人人爽电影蜜月| 午夜精品久久久久久99热软件| 亚洲欧美一区二区激情| 亚洲久久成人| 国产精品久久一区主播| 性18欧美另类| 欧美一区二区三区四区在线| 欧美aaa级| 99精品黄色片免费大全| 99国产精品久久久久久久| 欧美日韩一区二区高清| 一区二区在线看| 欧美电影资源| 欧美区一区二| 欧美一区亚洲一区| 久久精品视频在线| 国产精品国产成人国产三级| 亚洲欧美中文字幕| 欧美在线中文字幕| 亚洲二区在线观看| 99riav国产精品| 毛片一区二区三区| 中国成人黄色视屏| 亚洲激情在线播放| 欧美日韩一二三四五区| 久久久久青草大香线综合精品| av成人免费在线观看| 国产精品午夜在线| 欧美韩日一区| 麻豆国产精品va在线观看不卡| 国产精品jizz在线观看美国| 亚洲国产欧美不卡在线观看| 亚洲国产精品成人| 国产精品入口麻豆原神| 亚洲在线中文字幕| 亚洲黄色av| 国产麻豆精品久久一二三| 亚洲一区二区视频在线观看| 亚洲欧美成人网| 日韩视频二区| 久久精品国产免费观看| 国产综合视频| 久久天天狠狠| 欧美性生交xxxxx久久久| 裸体一区二区三区| 国产精品国产亚洲精品看不卡15| 9人人澡人人爽人人精品| 亚洲欧美精品suv| 宅男精品导航| 欧美激情精品久久久久久蜜臀| 最新亚洲电影| 欧美一区不卡| 国产精品免费一区二区三区在线观看 | 亚洲国产精品久久人人爱蜜臀| 久久www免费人成看片高清| 在线视频亚洲欧美| 免费不卡视频| 欧美.www| 欧美人体xx| 欧美激情四色 | 最近看过的日韩成人| 欧美激情bt| 免费av成人在线| 国产综合在线看| 亚洲国产欧美一区二区三区同亚洲 | 久久国产精品第一页| 欧美视频一区二区在线观看| 欧美激情第二页| 亚洲国产婷婷香蕉久久久久久99| 亚洲激情电影在线| 91久久精品国产91久久性色| 亚洲精品国产精品久久清纯直播 | 精品av久久久久电影| 男人的天堂亚洲| 国内精品一区二区三区| 欧美伊人影院| 久久免费精品日本久久中文字幕| 欧美黄色片免费观看| 欧美国产先锋| 日韩一二三在线视频播| 欧美精品亚洲精品| 一区二区日韩欧美| 欧美亚洲一区在线| 国产亚洲美州欧州综合国| 欧美在线免费视频| 欧美黑人在线播放| 一区二区三区四区五区视频| 欧美一区二区三区久久精品茉莉花| 伊人精品久久久久7777| 老妇喷水一区二区三区| 午夜一区二区三区在线观看| 久久网站免费| 欧美大学生性色视频| 亚洲伦伦在线| 国产精品三上| 久久人人爽人人| 亚洲三级观看| 久久都是精品| 91久久精品久久国产性色也91| 亚洲欧美日韩一区二区| 久久免费视频观看| 99精品视频免费全部在线| 国产九九精品视频| 亚洲一区综合| 亚洲丝袜av一区| 亚洲免费av网站| 国产精品久久国产精麻豆99网站| 欧美77777| 国产欧美一区二区精品秋霞影院 | 亚洲在线网站| 好吊日精品视频| 欧美片第1页综合| 久久久www成人免费精品| 欧美在线视频日韩| 亚洲电影中文字幕| 国产精品久久午夜| 欧美二区乱c少妇| 欧美一区二区视频网站| 一区二区三区国产精华| 欧美成人日本| 久久精品久久99精品久久| 一区二区国产在线观看| 亚洲第一色在线| 国产一区在线播放| 国产免费成人在线视频| 欧美日韩一区二区三区视频| 亚洲毛片在线看| 99热免费精品| 亚洲国产成人精品久久久国产成人一区| 欧美亚洲综合网| 久久久国产一区二区| 亚洲图中文字幕| 一本久久a久久精品亚洲| 欧美三级电影网|