新聞中心
我們了解了如何繪制主題化的和原始未主題化的單選按鈕,我曾提到,繪制菜單符號(hào)會(huì)更加復(fù)雜一些。復(fù)雜之處在于,這些符號(hào)是通過(guò)單色位圖實(shí)現(xiàn)的,而不是漂亮的全彩色位圖。首先,我們將通過(guò)一種錯(cuò)誤的做法來(lái)看看實(shí)際的效果,然后我們將展示如何修復(fù)它。請(qǐng)看下面的代碼:

創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營(yíng)銷、網(wǎng)站重做改版、淮南網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為淮南等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
在上面的代碼中,我們使用了 DrawFrameControl 這個(gè) API 函數(shù),往菜單項(xiàng)上繪制一個(gè)勾選符號(hào)。如果你正在運(yùn)行的是 Windows XP 默認(rèn)主題,你可能不會(huì)發(fā)現(xiàn)有什么問(wèn)題,但是如果將主題切換至 Windows 經(jīng)典,則你會(huì)發(fā)現(xiàn),在經(jīng)典主題下,菜單的背景色雖然是灰色,但是我們繪制的勾選符號(hào)是以黑白色來(lái)繪制的。
產(chǎn)生這種現(xiàn)象的原因已經(jīng)明明白白地寫在了 DrawFrameControl 的文檔描述中,請(qǐng)看下文:如果 uType 被設(shè)定為 DFC_MENU 或 DFC_BUTTON,且 uState 不為 DFCS_BUTTONPUSH,則框架控件將使用一個(gè)黑白色掩碼(也就是說(shuō),一個(gè)白色背景下的黑色框架控件)。
我們從 DrawFrameControl 所能得到的全部,只是一個(gè)黑白色掩碼。使用其他顏色來(lái)繪制它則是開(kāi)發(fā)者的責(zé)任。具體如何做呢?
首先,我們繪制這個(gè)掩碼到一個(gè)單色位圖,然后使用 BitBlt 這個(gè)函數(shù)來(lái)為它涂上其他顏色。還記得嗎?當(dāng)將一張單色位圖傳送至一張彩色位圖時(shí),源位圖中的黑色將會(huì)成為目標(biāo)DC的文本顏色,且源位圖中的白色將會(huì)變成目標(biāo)DC的背景色。
上面代碼中,有三個(gè)關(guān)鍵點(diǎn):1) 往一個(gè)單色位圖中繪制,從而得到一個(gè)掩碼。2) 設(shè)置目標(biāo)DC的文字顏色和背景色。3) 使用 BitBlt 來(lái)實(shí)現(xiàn)顏色映射。
修改代碼之后,我們可以觀察到,繪制的勾選符號(hào)已經(jīng)可以正確地反映系統(tǒng)菜單顏色了,因?yàn)槲覀儗⑺鼈冊(cè)O(shè)置為單色到彩色傳輸?shù)奈谋绢伾捅尘吧恕?/p>
經(jīng)過(guò)今天文章的講解,我想你應(yīng)該可以幫助這樣一批人,他們絞盡腦汁想在菜單上繪制一個(gè)透明的勾選符號(hào)。我大概可以想到實(shí)現(xiàn)它的兩種不同方案。
總結(jié)
希望各位對(duì)單色位圖有進(jìn)一步的理解。
當(dāng)前題目:聊聊繪制菜單符號(hào)的技法,你學(xué)會(huì)了嗎?
文章位置:http://www.dlmjj.cn/article/dpioces.html


咨詢
建站咨詢
