国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

用VC++完成自繪按鈕控制

用VC++完成自繪按鈕控制

更新時(shí)間:2022-05-07 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

四川 曾 志

Microsoft Windows以其豐富一致的圖形用戶界面,簡(jiǎn)單靈便的操
作,被廣大用戶所接受。對(duì)話框就是其中一個(gè)非常重要的界面形式,
并且Windows為其應(yīng)用程序的開發(fā)者提供了相當(dāng)豐富的界面資源,許多
控制可以方便地加入對(duì)話框中。但當(dāng)我們需要編寫一個(gè)商業(yè)應(yīng)用,需
要一個(gè)更友好的圖形用戶界面時(shí),就會(huì)發(fā)現(xiàn)資源的貧乏。
Visual C++提供了一個(gè)CBitmap Button類在一定程序上緩解了
增加新資源的要求。但當(dāng)我們要求在程序中能動(dòng)態(tài)地改變圖形時(shí),我
們就不得不考慮放棄CBitmapButton類,而坐下來(lái)自己做一點(diǎn)工作了。
一個(gè)可行的辦法就是重載CButton類(即按鈕控制)。這樣對(duì)這塊區(qū)域
的大小、位置和ID號(hào)都可以通過(guò)AppStadio方便地制作。當(dāng)然這樣作最
大的好處還是在于充分利用C++的特性把繪制控制的代碼封裝了起來(lái)
,既避免了重復(fù)性開發(fā),又使程序變得更簡(jiǎn)潔,增強(qiáng)了代碼的可讀性

現(xiàn)在我們就通過(guò)創(chuàng)建一個(gè)名叫CColorButton的類來(lái)學(xué)習(xí)這種方法
。雖然這是一個(gè)功能非常簡(jiǎn)單的類,通過(guò)調(diào)用成員函數(shù)ChangeColor可
改變其顏色,鼠標(biāo)點(diǎn)中時(shí)則高亮邊框表示選中。但利用這種思路我們
只需添加幾個(gè)數(shù)據(jù)成員和重載一個(gè)函數(shù)就可以方便地實(shí)現(xiàn)你所需要的
功能。
在創(chuàng)建這個(gè)類之前,我們必須先了解WM_DRAWITEM消息。當(dāng)按鈕
、組合框、列表框或菜單的某一視覺狀況發(fā)生變化時(shí),系統(tǒng)就會(huì)發(fā)送
一條WM_DRAWITEM消息給這些控制的擁有者窗口。這個(gè)消息的wParam
指出這個(gè)控制的 id 號(hào),而IParam則是一個(gè)指向DRAWITEMSTRUCT結(jié)構(gòu)
的指針,該結(jié)構(gòu)存放有關(guān)要繪制的項(xiàng)的信息以及繪制所需的類型。DR
AWITEMSTRUCT結(jié)構(gòu)具有如下格式。
typedef struct tagDRAWITEMSTRUCT{
UINT CtlType; // 控制類型
UINT CtlID;// 控制的ID號(hào)
UNIT itemID;//菜單項(xiàng)的索引
UINT itemAction;// 說(shuō)明需要的繪圖操作
UINT itemState; // 指明繪圖后的可見狀態(tài)
HWND hwndItem; // 控制的窗口句柄
HDC hDC; // 相關(guān)的設(shè)備環(huán)境
RECT rcItem;//被畫控制的邊框
DWORD itemData;// 指定與菜單項(xiàng)相聯(lián)系的應(yīng)用程序定義的
32位值
}DRAWITEMSTRUCT;
其中itemAction 和 itemState決定了需要的繪圖操作。itemAct
ion 說(shuō)明需要的繪圖操作,可為下列值中的一個(gè)或多個(gè);
值 含 義
ODA_DRAWENTIRE 需要重來(lái)全部控制時(shí)
ODA_FOCUS 獲得或失去輸入焦點(diǎn)
ODA_SELECT 選擇狀態(tài)改變
itemState指明當(dāng)前繪圖動(dòng)作發(fā)生之后,項(xiàng)的可見狀態(tài)。下面是狀
態(tài)標(biāo)志:
值 含 義
ODS_CHECKD 只用于菜單中
ODS_DISABLE 該項(xiàng)被屏蔽
ODS_FOCUS 該項(xiàng)具有輸入焦點(diǎn)
ODS_GRAYED 只用于菜單中
ODS_SELECT 該項(xiàng)處于被選中狀態(tài)
(上) □成都 曾志
用VC++實(shí)現(xiàn)自繪按鈕控制
利用VC++編程會(huì)發(fā)現(xiàn),當(dāng)按鈕控制接收到WM-DRMAWITEM消息時(shí)
會(huì)調(diào)用Cbotton類的DrawItem函數(shù)。因此我們要做的就是利用C++的
多態(tài)性通過(guò)重載CButton類的Drawitem函數(shù)來(lái)響應(yīng)MW-DRAWITEM消息。
下面我們就實(shí)際構(gòu)造一個(gè)CColorButton類。
class ccolorButton:public CButton
{ private:
COLORREF m-color:
public:
CColorButton():CButton(),m-color(0){}; //構(gòu)
造函數(shù)
void ChangeColor(COLORREF color); //改變顏色
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct
);//重載的函數(shù)
};
//重載的虛函數(shù)
void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDrawIt
emtruct)

CDC dc;
dc.Attach(lpDrawItemStruct->hDC); //得到繪制的設(shè)
備環(huán)境CDC
VERIFY( lpDrawItemStruct->CtlType==ODT-BUTTON);
if (lpDrawItemStruct->itemAction & ODA-DRAWENTIRE)

//重繪整個(gè)控制
CBrush brush(m-Color);
dc.FillRect(&(lpDrawItemstruct->reItem),&brush)

} if ((lpDrawItemStruct->itemstate & ODS-SELECTED
) &&
(lpDrawItemStruct->itemAction &
(ODA-SELECT | ODA-DRAWENTIRE))) { //選中了本控
制===>高亮邊框
COLORREF fc=RGB(255-GetRvalue(m-color), 255-GetG
Value(m-color), 255-GetBValue(m-color));
CBrush brush(fc);
dc.FrameRect(&(lpDrawItemStruct->rcItem),&brush
);
} if (!(lpDrawItemStruct->itemState & ODS-SELECT
ED) &&
(lpDrawItemStruct->itemAction & ODA-SELECT)){
//控制的選中狀態(tài)結(jié)束===>去掉邊框
CBrush brush(m-color);
dc.FrameRect(&lpDrawItemStruct->rcItem,&brush);
} dc.Detach();
} //用于改變顏色的成員函數(shù)
void CColorButton::ChangeColor(COLORREF color) { CR
ect rect;
m-color=color;
GetClientRect(&rect);

m-colorChangeColor(COLORREF color)color,WM-DRAWITEM
上面代碼中數(shù)據(jù)成員m-color和來(lái)保存按鈕的顏色。ChangeColo
r(COLORREF color)函數(shù)負(fù)責(zé)改變按鈕顏色值為color,然后通過(guò)使
控制的客戶區(qū)無(wú)效而激發(fā)WM-DRAWITEM消息。現(xiàn)在這個(gè)按鈕控制類就
算搭好了。下面我們把它加入到對(duì)話框中來(lái)試驗(yàn)一下(中)
用VC++實(shí)現(xiàn)自繪按鈕控制
1.首先通過(guò)AppWizard創(chuàng)建一個(gè)單文檔的應(yīng)用。
2.緊接著啟動(dòng)AppStadio創(chuàng)建一個(gè)對(duì)話框。添加一個(gè)按鈕控制,
并將其ID設(shè)置為 IDC-COLORBUTTON。最后一定要記住將push Button
Properties對(duì)話框中的Owner Draw檢查框置上檢查標(biāo)志。
3.在AppStadio內(nèi)運(yùn)行ClassWizzand來(lái)產(chǎn)生CTestDialog類。然
后在CTestdialog類中加入數(shù)據(jù)成員,在CTestDialog類說(shuō)明加入如下
的private型數(shù)據(jù)成員:
private:
ccolorButton m-ColorButton;
4.現(xiàn)在剩下的問題是到底要怎樣才能使m-ColorButton的DrawI
tem函數(shù)能響應(yīng)系統(tǒng)發(fā)往ID值為IDC-COLORBUTTON的按鈕控制的WM-D
RAWITEM消息。這時(shí)就要用到CWnd類的成員函數(shù)BOOL CWnd::Subcla
ssDlgItem(UINT nID,CWnd *pParent)。通過(guò)調(diào)用這個(gè)函數(shù),我們
可以動(dòng)態(tài)地接管從對(duì)話框模板產(chǎn)生的控制,并把它隸屬于CWnd對(duì)象。
即用當(dāng)前的CWnd對(duì)象接管發(fā)向隸屬于pParent的ID號(hào)為nID的控制的一
切消息。對(duì)于按鈕控制而言,它把當(dāng)前的按鈕控制的位置和大小也清
成和nID對(duì)應(yīng)的按鈕控制一樣。于是我們對(duì)CTestDialog的源文件進(jìn)行
如下的編輯:
BOOL CTestDialog::OnInitDialog()
{ CDialog::OnInitDialog();
//TODO:Add extra initialization here
m-ColorButton.SubclassDlgtem(IDC-COLORBUTTON,this)
;//接管消息
m-ColorButton.ChangeColor(RGB(255,0,0);//設(shè)置為
紅色(可設(shè)為任何顏色)
return(TRUE);

接著通過(guò)ClassWizzard在CTestDialog中加入一個(gè)響應(yīng)鼠標(biāo)點(diǎn)擊I
DC-COLORBUTTON按鈕的消息的函數(shù):
void CTestDialog::OnColerbutton()
{ //TODO:Add your control notification handler code
here
int r=int(((float)rand()/RAND-MAX)*255
int g=int(((float)rand()/RAND-MAX)*255
int b=int(((float)rand()/RAND-MAX)*255
m-ColorButton.ChangeColor(RGB(r,g,b));

5.最后,利用ClassWizzard為View加入一個(gè)響應(yīng)WM-LBUTTONDO
WN的函數(shù),以便激活對(duì)話框。請(qǐng)按如下代碼對(duì)其進(jìn)行編輯。
void CTestView::OnLButtonDown(UINT nflags,POINT po
int)
{ CTestDialog dlg;
dlg.Domodal();

6.編譯并測(cè)試該程序。當(dāng)鼠標(biāo)在落視窗中時(shí),按下鼠標(biāo)左鍵應(yīng)能
彈出一個(gè)對(duì)話框。在對(duì)話框中的紅色矩形區(qū)域內(nèi)按下鼠標(biāo)左鍵就會(huì)使
其邊框變成高亮狀態(tài),若在這塊區(qū)域內(nèi)釋放左鍵則這城區(qū)域就會(huì)改變
顏色且顏色是隨機(jī)的。
只需更改DrawItem函數(shù)中的重繪代碼,就可以得到自己的需要圖
形按鈕。 

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        国产精品高潮呻吟久久| 欧美日韩视频一区二区| **欧美大码日韩| 一区二区三区四区国产精品| 欧美日韩免费观看一区二区三区 | 国产剧情av麻豆香蕉精品| 日韩视频在线永久播放| 精品无码三级在线观看视频| 精品国产欧美一区二区| 成人污污视频在线观看| 久久久久久久综合色一本| 粉嫩av一区二区三区在线播放| 国产精品视频一区二区三区不卡| av中文字幕亚洲| 亚洲综合自拍偷拍| 欧美不卡视频一区| 成人国产精品免费| 午夜精品爽啪视频| 国产精品美女久久久久aⅴ| 欧美探花视频资源| 国产精品中文字幕一区二区三区| 日韩毛片视频在线看| 制服丝袜日韩国产| 91在线精品一区二区| 极品少妇xxxx精品少妇偷拍| 一区二区三区中文字幕电影| 日韩美一区二区三区| 91浏览器打开| 粉嫩aⅴ一区二区三区四区五区| 亚洲午夜精品在线| 国产精品久久99| 久久综合成人精品亚洲另类欧美 | 91色porny蝌蚪| 日韩二区三区四区| 亚洲特级片在线| 欧美一级国产精品| 成人黄色免费短视频| 麻豆精品在线播放| 亚洲一区二区在线免费看| 国产精品久久久一区麻豆最新章节| 欧美日韩视频在线第一区| 成人高清伦理免费影院在线观看| 亚洲国产欧美日韩另类综合 | 7777女厕盗摄久久久| 成人免费观看视频| 国产成人免费视频网站高清观看视频| 丝瓜av网站精品一区二区| 亚洲国产精品影院| 亚洲女性喷水在线观看一区| 国产片一区二区| 久久免费的精品国产v∧| 欧美一级午夜免费电影| 欧美日韩你懂得| 7777精品伊人久久久大香线蕉完整版 | 一区二区三区免费在线观看| 国产精品无圣光一区二区| 久久久精品一品道一区| 欧美mv和日韩mv的网站| 日韩视频在线永久播放| 欧美成人a∨高清免费观看| 日韩一区二区三区免费观看 | 91久久精品一区二区二区| 成人美女视频在线观看18| 成人av片在线观看| 一本一道久久a久久精品| 成人毛片老司机大片| 国产精品一区在线观看你懂的| 国模一区二区三区白浆| 国产一区二区伦理片| 国产成人日日夜夜| 成人综合婷婷国产精品久久| 97久久久精品综合88久久| 色婷婷综合久久| 欧美视频在线一区| 欧美一区二区日韩| 国产亚洲一区二区三区四区| 国产精品国产三级国产| 亚洲一区二区三区中文字幕在线| 午夜电影网一区| 精品制服美女丁香| 91女厕偷拍女厕偷拍高清| 欧美日韩激情一区| 精品国产一二三| 亚洲欧美一区二区三区久本道91 | 国产精品二区一区二区aⅴ污介绍| 国产精品污污网站在线观看| 亚洲影院久久精品| 久久国产综合精品| 成人一区二区三区中文字幕| 色菇凉天天综合网| 91精品国产aⅴ一区二区| 国产亚洲一区二区三区| 亚洲精品久久嫩草网站秘色| 亚洲444eee在线观看| 国产精品亚洲一区二区三区在线 | 成人h动漫精品| 在线观看一区日韩| 91精品国产手机| 国产精品久久久久婷婷 | 综合网在线视频| 麻豆国产欧美日韩综合精品二区| 成人激情文学综合网| 91精品国产综合久久福利软件| 欧美国产欧美综合| 日韩成人一级大片| 色综合视频在线观看| 日韩精品中午字幕| 亚洲小说欧美激情另类| 成人久久视频在线观看| 91精品福利在线一区二区三区| 中文字幕中文乱码欧美一区二区 | 亚洲欧美激情小说另类| 国产制服丝袜一区| 欧美日韩免费一区二区三区视频| 欧美激情资源网| 麻豆精品视频在线观看免费| 91久久精品日日躁夜夜躁欧美| 日本一区二区免费在线观看视频 | 九色综合狠狠综合久久| 欧美日韩国产免费| 一区二区三区蜜桃| 91蜜桃视频在线| 国产精品美女久久久久久久 | jlzzjlzz欧美大全| 欧美最猛黑人xxxxx猛交| 欧美性色欧美a在线播放| 国产精品五月天| 国产一区不卡在线| 久久久影视传媒| 久久国产精品99精品国产| 日韩一区二区在线观看视频| 亚洲第一久久影院| 91电影在线观看| 亚洲一区二区三区免费视频| 色综合欧美在线视频区| 一区二区三区中文在线| 91美女片黄在线| 亚洲天堂成人网| 在线一区二区观看| 亚洲午夜三级在线| 欧美另类变人与禽xxxxx| 天天影视网天天综合色在线播放| 欧美日韩国产精品成人| 日本欧美一区二区在线观看| 日韩一级视频免费观看在线| 蜜臀91精品一区二区三区| 成人综合在线网站| 国产三级一区二区| 精品精品欲导航| 六月丁香婷婷久久| 久久国产精品免费| 喷水一区二区三区| 免费看日韩a级影片| 日本欧美韩国一区三区| 日韩精品乱码免费| 国产在线麻豆精品观看| 韩国av一区二区三区在线观看| 亚洲成人资源在线| 成人av午夜电影| 国产成人99久久亚洲综合精品| 91免费在线播放| 亚洲福利一区二区三区| 日韩一区二区三区观看| 久久精品国产秦先生| 精品电影一区二区三区 | 亚洲同性同志一二三专区| 欧美日免费三级在线| 琪琪久久久久日韩精品| 国产午夜一区二区三区| 91网站在线播放| 免费人成精品欧美精品| 国产日韩欧美高清在线| 91成人在线免费观看| 免费成人在线播放| 亚洲视频 欧洲视频| 精品国精品自拍自在线| 色狠狠色噜噜噜综合网| 精品亚洲aⅴ乱码一区二区三区| 亚洲三级电影网站| 久久久亚洲精品石原莉奈| 色狠狠综合天天综合综合| 韩国成人精品a∨在线观看| 一二三区精品视频| 国产女人aaa级久久久级| 欧美日本在线播放| 91色九色蝌蚪| 岛国精品一区二区| 狠狠色综合色综合网络| 偷拍一区二区三区四区| 亚洲人一二三区| 久久噜噜亚洲综合| 欧美一区二区黄色| 欧美日韩亚洲高清一区二区| 99久久久久久| 高清视频一区二区| 国产一区二区三区四| 免费xxxx性欧美18vr| 亚洲大尺度视频在线观看| 亚洲尤物在线视频观看| 亚洲免费大片在线观看|