自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聊聊繪制菜單符號的技法,你學會了嗎?

開發(fā) 前端
我們從 DrawFrameControl 所能得到的全部,只是一個黑白色掩碼。使用其他顏色來繪制它則是開發(fā)者的責任。具體如何做呢?

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

在上面的代碼中,我們使用了 DrawFrameControl 這個 API 函數(shù),往菜單項上繪制一個勾選符號。如果你正在運行的是 Windows XP 默認主題,你可能不會發(fā)現(xiàn)有什么問題,但是如果將主題切換至 Windows 經(jīng)典,則你會發(fā)現(xiàn),在經(jīng)典主題下,菜單的背景色雖然是灰色,但是我們繪制的勾選符號是以黑白色來繪制的。

產(chǎn)生這種現(xiàn)象的原因已經(jīng)明明白白地寫在了 DrawFrameControl 的文檔描述中,請看下文:如果 uType 被設定為 DFC_MENU 或 DFC_BUTTON,且 uState 不為 DFCS_BUTTONPUSH,則框架控件將使用一個黑白色掩碼(也就是說,一個白色背景下的黑色框架控件)。

我們從 DrawFrameControl 所能得到的全部,只是一個黑白色掩碼。使用其他顏色來繪制它則是開發(fā)者的責任。具體如何做呢?

首先,我們繪制這個掩碼到一個單色位圖,然后使用 BitBlt 這個函數(shù)來為它涂上其他顏色。還記得嗎?當將一張單色位圖傳送至一張彩色位圖時,源位圖中的黑色將會成為目標DC的文本顏色,且源位圖中的白色將會變成目標DC的背景色。

上面代碼中,有三個關鍵點:1) 往一個單色位圖中繪制,從而得到一個掩碼。2) 設置目標DC的文字顏色和背景色。3) 使用 BitBlt 來實現(xiàn)顏色映射。

修改代碼之后,我們可以觀察到,繪制的勾選符號已經(jīng)可以正確地反映系統(tǒng)菜單顏色了,因為我們將它們設置為單色到彩色傳輸?shù)奈谋绢伾捅尘吧恕?/p>

經(jīng)過今天文章的講解,我想你應該可以幫助這樣一批人,他們絞盡腦汁想在菜單上繪制一個透明的勾選符號。我大概可以想到實現(xiàn)它的兩種不同方案。

總結

希望各位對單色位圖有進一步的理解。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-12-26 07:48:04

敏捷項目

2024-06-12 08:36:25

2024-03-05 10:09:16

restfulHTTPAPI

2024-08-19 10:24:14

2023-01-29 08:08:34

并發(fā)庫conc通用庫

2023-07-10 08:36:21

工具pptword

2024-03-04 07:41:18

SpringAOPOOP?

2022-07-11 09:00:37

依賴配置文件Mybati

2022-04-13 09:01:45

SASSCSS處理器

2022-09-26 08:49:11

Java架構CPU

2022-12-08 10:49:43

2023-06-05 08:36:04

SQL函數(shù)RANK()

2022-03-05 23:29:18

LibuvwatchdogNode.js

2022-12-14 08:31:43

#error編譯命令

2023-03-07 07:50:15

Transactio事務代碼

2024-11-08 08:56:01

2023-12-05 17:57:13

nginx參數(shù)

2022-10-11 08:48:08

HTTP狀態(tài)碼瀏覽器

2024-10-17 10:00:59

2023-04-04 08:14:45

點贊
收藏

51CTO技術棧公眾號