亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 10.6.4 改變按鈕控件的背景色及文本顏色.txt

?? 網(wǎng)上第一本以TXT格式的VC++深入詳解孫鑫的書.全文全以TXT格式,并每一章節(jié)都分了目錄,清晰易讀
?? TXT
字號:
10.6.4 改變按鈕控件的背景色及文本顏色

接下來,根據(jù)上面的知識,我們按照同樣的方法改變Graphic程序中設置對話框上的 OK按鈕的背景
色及其文字的顏色。也就是說,在CSettingDlg類的 OnCtlColor函數(shù)中,
如果判斷出當前繪制的控件的 ID等于 OK按鈕的 ID ( IDOK),那么就返回自定義的畫刷, 
代碼如例  10-32所示。  
例 10-32  

if(pWnd->GetDlgCtrlID ( ) ==IDOK) 

{ 
return m_brush ; 
Build并運行Graphic程序,可是讀者將會發(fā)現(xiàn)新加的代碼并沒有起作用, OK按鈕的背景色并沒有被
改變。那么試著改變一下文字的顏色,在上述例 10-32所示代碼的 return語旬之前添加下面這條語
句: 
pDC->SetTextColor(RGB(255 , 0, 0))i 
再次運行 Graphic程序,將會發(fā)現(xiàn)添加的代碼仍然沒有任何作用, OK按鈕的背景色和文本顏色都沒
有發(fā)生改變。可見,對于按鈕來說,使用上述方法來改變其背景和文本顏色是無效的,只能尋找其
他的解決方法。實際上,如果想要改變按鈕控件的背景色和文本顏色,需要使用CButton類的一個成
員函數(shù): DrawItem,該函數(shù)的聲明形式如下所示: 
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); 
從其聲明形式,可以知道這個函數(shù)是一個虛函數(shù)。當一個自繪制按鈕(具有 BS OWNERDRAW風格的按
鈕)在繪制時,框架將會調(diào)用這個虛函數(shù)。因此,如果想要實現(xiàn)一個自繪制按鈕控件的繪制,應該重
載這個虛函數(shù)。該函數(shù)的參數(shù)是DRAWITEMSTRUCT 結(jié)構(gòu)類型,其定義如下所示: 
typedef struct tagDRAWITEMSTRUCT { 

UINT CtlType ; 
UINT CtlID; 
UINT itemID ; 
UINT itemAction ; 
UINT itemState; 
HWND hwndltem; 
HDC hDC ; 
RECT rcltem; 
DWORD itemData ; 
} DRAW工TEMSTRUCT;
該結(jié)構(gòu)體中有一個hDC成員,指向?qū)⒁L制的按鈕的DC。為了繪制這個按鈕,可以向該DC中選入自定
義的顏色、畫刷等對象。但是有一點讀者一定要注意,在此重載函數(shù)結(jié)束前,一定要恢復hDC中原有
對象。
因此,如果想要改變OK按鈕的文本顏色,需要編寫一個自己的按鈕類,讓這個類派 ! 生于CButton
類,并重寫Drawltem函數(shù),在此函數(shù)中實現(xiàn)按鈕背景色和文本顏色的設置。然后,將OK按鈕對象與
這個類相關(guān)聯(lián)。這樣,在繪制OK按鈕時,框架就會調(diào)用這個自
定義的按鈕類的 Drawltem函數(shù)來繪制。
下面我們?yōu)?Graphic程序創(chuàng)建一個派生于CButton的類,方法是在VC++界面上選擇 <Insert\New 
Class】菜單命令,將彈出如圖 10.29所示的NewClass對話框。在此對話框中,在Class乃pe下拉列
表中選擇MFC Class,將新增的類命名為(即在Name編輯框中輸入): CTestBtn,并將從BaseClass下
拉列表中為其選擇基類: CButton。
圖 10.29添加一個派生于CButton的新類
這里,在 Graphic工程的 ClassView標簽頁上就可以看到這個新增的類: CTestBtn了。然后為此類
添加 DrawItem虛函數(shù)的重寫,井在其中添加實現(xiàn)按鈕繪制的代碼,結(jié)果如例 10-33所示。
例 10-33 

void CTestBtn : : Drawltem(LPDRAWITEMSTRUCT lpDrawltemStruct) 
{ 
// TODO : Add your code to draw the specified item 
UINT uStyle = DFCS_BUTTONPUSH ; 

11 This code only works with buttons . 
ASSERT(lpDrawltemStruct->CtlType ODT_BUTTON) ; 

11if drawing selected, add the pushed style to DrawFrameControl . 
if (lpDrawltemStruct->itemState & ODS_ SELECTED) 
uStyle 1= DFCS_ PUSHED ; 

// Draw t he button frame . 
: : DrawFrameControl (lpDrawltemStruct->hDC , 
&lpDrawltemStruct->rcltem, DFC_ BUTTON, uStyle) ; 
11 Get the button's text . 
CString strText ; '. 
GetWindowTex t(strText) ; 

11 Draw the button text using the text color red . COLORREF crOldColor = :: 
SetTextColor(lpDrawltemStruct->hDC , RGB(255 , 0 , 0)); : : DrawText 
(lpDrawltemStruct->hDC , strText , strText . GetLength() , &lpDraw工 temStruct->rcltem, 
DT_SINGLELINEIDT_VCENTERIDT_ CENTER) ; :: SetTextColor(lpDrawltemStruct->hDC , 
crOldColor) ; 
接下來,利用 ClassWizard打開 Add Member Variable對話框,為設置對話框上的 OK按鈕關(guān)聯(lián)一個
成員變量。將變量名稱設置為 m btnTest,類型選擇為 CTestBtn,如圖 10 .30所示。

M帽"隙 fV回靦.Ie….: 
E蠅...". 
IControl 面二I 


VW幅嗣-
l口"舶工l 
_: 
", "CTe酬自..-幅恤'陽帽晴圓靦04d…唱
圖 10.30為 OK按鈕控件添加關(guān)聯(lián)的成員變量 
第 10


之后,單擊 Add Member Variable對話框上的【 OK】按鈕。系統(tǒng)會提示應在 SettingDIg.h文件中
包含 CTestBtn類的定義文件。因此在 SettingDIg.h文件的前部添加下面這條語句: 
#include "TestBtn.h" 
另外,前面已經(jīng)介紹過了,自繪制控件應該具有 BS OWNERDRAW風格,這可以通過控件屬性對話框中
的 Owner draw選項來設置。打開 OK按鈕的屬性對話框,并打開 Styles標簽頁,選中 Ownerdraw
選項即可。如圖 10.31所示。 
Build井運行 Graphic程序,打開設置對話框,這時可以看到 OK按鈕的文字變成紅色
的了。如圖 10.32所示。
h l1IIID1 可唱唱且』

止」
蛐罩 
2旦~
-
r. '

咽'缸..... ...... I ExWMed S1)4e. J 「匾蟲'
稅~雖
rDel響曲.. I r刷刷.. "啊t...帽'劇增...ot: ,,6.錦
v屆豆豆亟「蜘曲F函γ一一丁 
「幅.. r F10t V咽陽I ..Ig.....ent: 
來倒 
r 811 . I Oefautt一一-::J
圖 10.31設置 OK按鈕的 Ownerdraw屬性 圖 10.32 OK按鈕文字顏色的改變
為了改變 OK按鈕的背景色,這里筆者為大家提供兩個類,一個是筆者以前編寫的一個按鈕類: 
CSXBtn,在該類中重寫了 DrawItem虛函數(shù),在此函數(shù)中改變按鈕的背景色。這個類的功能不是很強,
主要是起-個演示作用,提供給大家做一個參考,讀者可以根據(jù)需要自行完善。另一個類: CButtonST
是在網(wǎng)上找到的一個按鈕類,這個類的功能比較豐富,可以用于實際開發(fā)中。 CSXBtn類的頭文件及
源文件都位于隨書附帶光盤本章程序所在的目錄下,文件名分別是: SXBtn.h, SXBtn叩p。至于 
CButtonST類,讀者可以上搜索引擎搜索" CButtonST"關(guān)鍵字。
使用這兩個類的方法是,先兩個類的頭文件和源文件復制到自己的 Graphic工程所在目錄下,并將
它們添加到自己的 Graphic工程中,方法是在 VC++開發(fā)環(huán)境中打開該工程,然后選擇【 Project\Add 
To Project\Files. ..】菜單項,這時會彈出如圖 10.33所示的向工程中插入文件的對話框,找到
將要插入的文件所在目錄,然后選中它們,單擊 (OK】按鈕即可。

.tJ2!1 
董翩, ω|仙aphic 3+-l!J ct因· 

In墨en In1O: IGraphlc 3 
M 
圖 10 .3 3向工程插入文件

396 I紗' 
vc忡深λ



這時,在 Graphic工程左邊的 ClassView標簽頁上就可以看到這兩個類 : CSXBtn和 CButtonST。接
下來,介紹一下在 Graphic程序中如何使用這兩個類。
首先利用 CSXBtn類實現(xiàn)設置對話框上 Cance]按鈕的文字顏色和背景色的改變。第一
步,選中該按鈕屬性對話框上的 Owner draw選項,以便該按鈕具有 BS OWNERDRAW風格。第二步,
給這個 Cancel按鈕關(guān)聯(lián)一下成員變量,方法是通過 ClassWizard打開增加成員變量的對話框,如圖
所示。將該變量命名為 ffi_btnCancel.但從變量類型下拉列表框中選擇變量類型時(如圖 10.34所
示),卻找不到所需的 CSXBtn類。這里可以先隨便從中選擇一種類型,單擊 OK按鈕完成新變量的添
加。然后到 CSettingDlg類的頭文件 SettingDlg.h中打開剛才新增變量的定義,手工將其類型修改
為 CSXBtn。這時還需要包含該類的頭文件,即在 SettingDlg.h文件的前部添加下面這行代碼 : 
#include "SXBtn.h" 
Build并運行 Graphic程序,打開設置對話框,這里可以看到 Cancel按鈕的背景色變成了綠色,文
字是紅色的 (如圖 10.35所示 )。這是利用筆者提供的 CSXBtn類完成的設置按鈕背景色和文字顏色
的功能。 
IA.t.\ "1 ..mh..,函牛1二 I!E:" .!J2!l 軍儼怕呵 γ?哩'主j
We..ber YaflMIe ..",e: 
Im_btn C .n白' 丘J線寬 
,..噸·市 巳巳」

IC.n".' .:J 

v......ble type: 8實拽
比搖n .:J 「虛鎖 ~1~員
l CT..舊tn
F點鱗

。..四tptlon:
..., to C8 un…"帽 ...ber
c= 
圖 10 . 34為 Cance l按鈕添加關(guān)聯(lián)的成員變量圖 10 . 3 5 Can ce1按鈕背景色和文本顏色的改變

為了演示 CButtonST類的使用,在 Graphic程序中的設置對話框資源上再添加一個按鈕控件,將其 
ID設置為 IDC_BTN_ST, Caption設置為 : ButtonST。這時的設置對話框資源如圖 10.36所示。
些些些一二二 n 1;'"型主j 

t「 ;11韶 

;i lm: 
i盧 i:

圖 1 0.36添加的 ButtonST按鈕


I 397 

第 10

按照上面同樣的方法為此按鈕添加一個關(guān)聯(lián)的成員變量 : m_btnST,并將其類型手工修改為 : 
CButtonST。井在 Settin g Dl g .h文件的前部包含相應的頭文件 :
#工 nclude "BtnST . h " . 
與上面設置 OK按鈕和 Cancel按鈕背景色和文本顏色的實現(xiàn)方法不同的是,使用 CButtonST這個類
時,并不需要通過按鈕屬性對話框設置其 Ownerdraw選項這個屬性,這個類的內(nèi)部會自動設置 BS 
OWNERDRAW風格。
接下來初始化 m_btnST變量,根據(jù)前面的知識,我們知道這可以放到 CS ettingDlg類的 
OnlnitDialog函數(shù)中進行,這是 WM INITDIALOG消息的響應函數(shù)。但是現(xiàn)在在 CSettingDlg類中還
沒有這個消息響應函數(shù),所以需要為該類增加該消息響應函數(shù)。
初始化工作包括兩個部分 :設置活動時的背景色和前景色,后者也就是按鈕活動時文字的顏色。因
此在 OnlnitDialog函數(shù)中添加下述代碼,將按鈕背景色設置為藍色,前景色設置為紅色 : 
ffi_btnST .SetActiveBgColor(RGB(O , O, 255)) ; 

ffi_btnST .SetActiveFgColor(RGB(255 , O, O)) ; 

然后運行 Graphic程序,打開設置對話框,可以看到當把鼠標移動到 ButtonST這個按鈕上時,它的
背景色變成藍色,文字變?yōu)榧t色 (如圖 10 . 37所示) ;當把鼠標移走后,該按鈕又恢復為原來的顏
色,如圖 10.38所示。
|包itll i ll! j飛.:三jhIt inq悟'四主l 


I 
銷寬
錦寬


'回t田、5 T,專稟錢
r.~結(jié) 
「噩揄 <<~員il.拽 哥1~員
r
F點銷 F點撞 
[叫二工士丁f未生二二丁1 
圖 10 .3 7鼠標位于 ButtonST按鈕圖 1 0.38鼠標不位于 Button ST技上時按鈕的顯示狀態(tài) 鈕上時
按鈕的顯示狀態(tài)
還可以調(diào)用下面兩行函數(shù),設置 ButtonST按鈕不活動時的背色和前景色 : 
ffi_btnST .SetlnactiveBgColor(RGB(255 , O, 255)) ; 
ffi_btnST .SetlnactiveFgColor(RGB(255 , 255 , O)) ; 

再次運行 Graphic程序,打開設置對話框,這時就可以看到,對 ButtonST這個按鈕來說,當鼠標移
動它的上面時(活動狀態(tài))和移走后 (不活動狀態(tài)),按鈕的背景色和文字的顏色都不一樣了。讀者可
以親自體驗一下。
通過上面的使用,我們可以看到雖然 CButtonST這個類提供的方法很多,但其調(diào)用還是比較簡單的,
讀者可以充分挖掘這個類所提供的功能來完善自己的程序。
, 398 I脅" vc..深λ詳解 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产剧情av麻豆香蕉精品| 国产精品成人免费| 蜜桃久久av一区| 日韩欧美一卡二卡| 久久精品国产精品青草| 日韩亚洲欧美成人一区| 麻豆国产精品777777在线| 亚洲一区日韩精品中文字幕| 91网站在线观看视频| 伊人色综合久久天天人手人婷| 色综合天天狠狠| 午夜激情久久久| 欧美一级搡bbbb搡bbbb| 国产一区二区在线看| 国产精品国产三级国产aⅴ入口 | 亚洲精品视频在线观看网站| 日本久久电影网| 美女视频一区在线观看| 亚洲国产成人在线| 欧美艳星brazzers| 狠狠色丁香九九婷婷综合五月 | 国产精品久久久久久久第一福利| 91视频一区二区| 美国十次了思思久久精品导航| 国产亚洲综合av| 欧美无砖专区一中文字| 国产一区二区三区日韩| 亚洲欧美色图小说| 精品国产一区二区三区av性色| 成人av中文字幕| 日韩精品亚洲一区二区三区免费| 国产免费成人在线视频| 欧美午夜一区二区三区免费大片| 国产一区二区三区精品欧美日韩一区二区三区 | 色呦呦国产精品| 秋霞国产午夜精品免费视频| 国产精品毛片大码女人| 欧美高清视频一二三区| 不卡一区在线观看| 蜜桃免费网站一区二区三区| 亚洲免费观看在线视频| 久久亚洲一级片| 6080国产精品一区二区| 99久久精品免费看国产免费软件| 美女视频免费一区| 亚洲一区二区三区四区在线免费观看| 久久精品男人天堂av| 欧美精品tushy高清| 97精品久久久久中文字幕| 精品亚洲国内自在自线福利| 亚洲激情自拍视频| 日本一区二区三区视频视频| 欧美一二三区精品| 在线免费不卡电影| 盗摄精品av一区二区三区| 九色porny丨国产精品| 性做久久久久久免费观看| 国产精品久久一级| 国产无遮挡一区二区三区毛片日本| 3d成人动漫网站| 在线观看亚洲精品| 色域天天综合网| 99久久精品国产毛片| 国产精品88av| 国产精品一区二区久激情瑜伽| 91色婷婷久久久久合中文| 成人黄色软件下载| 国产91综合网| 国产成人免费视频网站高清观看视频 | 国产精品成人在线观看| 中文一区在线播放| 国产日韩欧美一区二区三区乱码 | 在线精品视频一区二区| 91麻豆视频网站| 94-欧美-setu| 色综合色综合色综合| 91一区二区在线观看| 成人精品一区二区三区四区 | 毛片av一区二区| 久久99精品国产麻豆婷婷洗澡| 日本va欧美va欧美va精品| 日韩电影免费在线观看网站| 午夜精品国产更新| 麻豆91精品视频| 国产综合久久久久久久久久久久| 精品无人区卡一卡二卡三乱码免费卡 | 丝袜诱惑制服诱惑色一区在线观看 | 欧美国产一区二区在线观看| 日本一区二区三级电影在线观看 | 成人av午夜影院| av成人免费在线| 色天天综合久久久久综合片| 在线观看国产日韩| 制服丝袜日韩国产| 26uuu欧美| 国产精品看片你懂得| 亚洲三级电影全部在线观看高清| 亚洲一区在线观看免费| 男男gaygay亚洲| 国产原创一区二区| av网站免费线看精品| 91国偷自产一区二区使用方法| 欧美日韩中字一区| 精品日韩一区二区三区免费视频| 久久久综合激的五月天| 一区免费观看视频| 五月天一区二区| 国产一区二区精品久久99| 国产.精品.日韩.另类.中文.在线.播放| 粉嫩嫩av羞羞动漫久久久| 欧美亚洲自拍偷拍| 精品国产一区a| 最新国产精品久久精品| 日本网站在线观看一区二区三区 | 中文字幕在线一区| av在线不卡电影| 欧美日韩色综合| 国产性做久久久久久| 亚洲激情自拍视频| 极品少妇xxxx精品少妇偷拍| aaa国产一区| 日韩限制级电影在线观看| 中文字幕制服丝袜成人av| 天天影视涩香欲综合网| 成人免费看的视频| 3751色影院一区二区三区| 国产精品久久久久久久久久久免费看 | 亚洲综合图片区| 国产麻豆精品视频| 欧美日韩一区二区在线视频| 久久精品一区四区| 日韩电影在线免费看| 成人精品鲁一区一区二区| 91精品国产综合久久福利| 日韩一区欧美一区| 国产在线一区二区| 欧美日韩国产一级片| 国产精品青草久久| 激情图区综合网| 欧美电影一区二区三区| 日韩一区在线看| 国产成人精品免费看| 日韩三级精品电影久久久 | 亚洲第一av色| 99久久久无码国产精品| 久久精品一区二区| 喷白浆一区二区| 欧美性三三影院| 亚洲色图色小说| 国产成人精品一区二| 日韩欧美国产一区二区在线播放| 亚洲国产欧美一区二区三区丁香婷| 成人国产精品免费观看动漫| 精品理论电影在线观看 | 91女厕偷拍女厕偷拍高清| 精品成人a区在线观看| 日韩二区在线观看| 欧美日韩一区在线观看| 亚洲另类在线视频| 91视视频在线观看入口直接观看www | 成人午夜伦理影院| 欧美精品一区二区久久久| 免费久久99精品国产| 在线不卡免费欧美| 亚洲成av人片观看| 欧美区一区二区三区| 亚洲成人中文在线| 欧美三电影在线| 日一区二区三区| 91精品国产综合久久久久| 亚洲电影一级黄| 欧美乱熟臀69xxxxxx| 亚洲va国产天堂va久久en| 欧美日韩中文一区| 午夜精品一区二区三区三上悠亚| 欧美色图片你懂的| 天天av天天翘天天综合网| 欧美日韩国产首页| 日本aⅴ精品一区二区三区| 日韩欧美国产电影| 国产一区二区三区日韩| 亚洲国产精品国自产拍av| 成人avav在线| 亚洲最快最全在线视频| 欧美色精品在线视频| 日本怡春院一区二区| 久久亚洲二区三区| 不卡视频一二三四| 一区二区高清视频在线观看| 欧美二区在线观看| 国内成人精品2018免费看| 欧美激情一区二区三区| 色综合久久99| 日本不卡一区二区三区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 极品美女销魂一区二区三区免费| 久久久综合视频| 色噜噜狠狠色综合欧洲selulu| 亚洲高清免费在线| 久久久影视传媒|