久久―日本道色综合久久,亚洲欧美精品在线,狼狼色丁香久久婷婷综合五月,香蕉人人超,日本网站黄,国产在线观看不卡免费高清,无遮挡的毛片免费

2023信創(chuàng)獨角獸企業(yè)100強(qiáng)
全世界各行各業(yè)聯(lián)合起來,internet一定要實現(xiàn)!

VC制作顏色選擇組合框

2004-02-23 eNet&Ciweek

源碼

效果圖:



  一、基本過程

  (1) 首先,打開VC++新建一個基于對話框的空白工程。這個我就不用多做介紹了吧。
  (2) 往界面上拉一個ComboBox控件吧,然后不要忘了聲明相應(yīng)的類對象,我們以后的操作可都全靠它了。
  (3) 新建一個類,該類是從CComboBox類繼承下來的,類名為:CBSColorComboBox。

  接下來就讓我們先來了解一下畫控件的基本原理和過程,也許這個才是本文的原意。大家都知道Windows中所有可視的東西都是畫出來的,那么這個畫畫的內(nèi)部過程又是怎樣的呢?一般畫Windows控件的過程分為三大部分:

  第一:在WM_MEASUREITEM消息影射函數(shù)中設(shè)置當(dāng)前要畫的Item的大小尺寸;
  第二:在WM_DRAWITEM消息影射函數(shù)中根據(jù)Item的大小尺寸來畫該Item(圖標(biāo)/位圖/字符串等);
  第三:在WM_PAINT消息映射函數(shù)中不斷的繪制當(dāng)前的控件內(nèi)容。下面我們針對CBSColorComboBox類的這幾個過程來做個簡單的介紹。

  (1) 在WM_MEASUREITEM消息影射函數(shù)中設(shè)定Item的大小尺寸。在這里我們只需要設(shè)置Item的高度即可。這里的高度我們設(shè)置為2倍的系統(tǒng)小ICON的高度(用::GetSystemMetrics(SM_CXSMICON)取得)。

  (2) 在WM_DRAWITEM消息影射函數(shù)中根據(jù)Item的大小尺寸來畫該Item的各種信息。你可以在Item的矩形區(qū)域內(nèi)畫各種各樣的信息,例如:圖標(biāo)/位圖/字符串等等。那么有人會疑問:“我們用什么來畫?我們在哪里畫?又如何來畫呢?”。

  答案其實都在這個LPDRAWITEMSTRUCT結(jié)構(gòu)中。hDC成員為設(shè)備上下文環(huán)境(HDC),獲得了該設(shè)備句柄也就意味著我們擁有了畫任何位圖/圖標(biāo)/文本的能力;那么接下來的問題就是:我們在哪里來畫呢?答案也很簡單:獲得LPDRAWITEMSTRUCT結(jié)構(gòu)中Item的矩形區(qū)域(rcItem),那么這就是你施展才華的空間了,要充分利用它哦!最后一步就是如何來畫的問題了,說白了就是如何分配每個元素的空間,如何在它們各自的空間上畫出你想要的東西。按照常規(guī)一般分別計算出ICON所占的矩形區(qū)域/文本所占的矩形區(qū)域/位圖的矩形區(qū)域,如果你還有其他元素那么也應(yīng)該計算出該元素所占的矩形區(qū)域/位圖所占的矩形區(qū)域。

  接下來我想一切都很簡單了,不外乎CDC類的幾個常用函數(shù):畫圖標(biāo)用DrawIcon;畫位圖用:BitBlt;畫文字用:DrawText等等。如果你覺得視覺上還不夠COOL,你還可以來設(shè)置各個Item的文本顏色,背景顏色,以及圖標(biāo)的突起和凹陷的視覺效果。

  二、需要注意的問題:
  第一:程序為了消除不斷繪制所帶來的閃爍現(xiàn)象,特意在WM_ERASEBKGND消息中中做了特殊處理;在WM_PAINT消息中直接把組合框的客戶區(qū)當(dāng)成一幅位圖來不斷更新,而不是對ICON區(qū)域和文本區(qū)域分別重繪。
  第二:每當(dāng)用戶改變了組合框的當(dāng)前內(nèi)容后,你在畫新的Item之前一定要記得清除前次組合框內(nèi)的內(nèi)容。
  第三:如果您想選擇更多的顏色,那么只要選擇組合框中的最后一個Item(More Colors)即可,這個Item是為用戶自定義顏色而專門設(shè)置的。

  怎么樣,做自己的控件Easy吧!其實上面的過程適用于菜單Menu/ListBox/Button/ComboBox等大多數(shù)東東的自畫過程。如果你感覺聽起來還是有點不知所云,那么打開工程看看吧,相信你會一目了然!

相關(guān)頻道: eNews

您對本文或本站有任何意見,請在下方提交,謝謝!

投稿信箱:tougao@enet16.com