修改static控制項背景顏色和文字顏色

2021-07-13 17:59:56 字數 2164 閱讀 5000

當 static 控制項或具有 es_readonly 風格的 edit 控制項被繪製時,會向父視窗傳送 wm_ctlcolorstatic 訊息。如果我們在視窗過程中處理該訊息,就必須返回乙個畫刷控制代碼,windows 會使用該畫刷來繪製控制項背景(子視窗背景)。

也就是說,改變 static 控制項的背景顏色只有這一種方式,就是處理 wm_ctlcolorstatic 訊息。wm_ctlcolorstatic 訊息就是用來設定背景畫刷的。

改變 static 控制項的背景顏色:

lresult callback

wndproc

(hwnd

hwnd,

uint

message,

wparam

wparam,

lparam

lparam)

return0;

}

執行結果:

修改文字背景顏色使用 setbkcolor 函式,它的原型為:

colorref

setbkcolor

(hdc

hdc,

//裝置環境控制代碼

colorref

crcolor //背景顏色

);

修改文字前景色(文字顏色)使用 settextcolor 函式,它的原型為:

colorref

settextcolor

(hdc

hdc,

//裝置環境控制代碼

colorref

crcolor //背景顏色

);

這裡我們修改的是 static 控制項中的文字顏色,所以需要獲取 static 控制項的裝置環境控制代碼。非常巧妙的是,傳送 wm_ctlcolorstatic 訊息時,wparam 引數表示的就是 static 控制項的裝置環境控制代碼(lparam 表示控制項控制代碼)。

下面的**會修改文字的背景色和前景色:

lresult callback

wndproc

(hwnd

hwnd,

uint

message,

wparam

wparam,

lparam

lparam)

return0;

}

執行結果:

所以要想達到修改背景顏色的目的,除了修改static 控制項的背景顏色,還要修改文字的背景顏色。實現透明背景需要設定文字背景顏色透明,同時返回沒有顏色的畫刷。

1) setbkmode 函式可以用來設定文字的背景模式,它的原型為:

int

setbkmode

(hdc

hdc,

//裝置環境控制代碼

int ibkmode //背景模式

);

ibkmode 有下面兩種取值:

取值說明

opaque

使用當前背景顏色來填充背景。

transparent

背景透明。

2) getstockobject (null_brush); 語句可以返回沒有顏色的畫刷。

示例**:

複製

純文字新視窗

case wm_ctlcolorstatic:

hdcstatic =

(hdc)wparam;

settextcolor

( hdcstatic,

rgb(

0x41

,0x96

,0x4f));

//翠綠色

setbkmode

(hdcstatic, transparent);

//透明背景

return

(int_ptr)

getstockobject

(null_brush);

//無顏色畫刷

執行效果:

修改static控制項背景顏色和文字顏色

當 static 控制項或具有 es readonly 風格的 edit 控制項被繪製時,會向父視窗傳送 wm ctlcolorstatic 訊息。如果我們在視窗過程中處理該訊息,就必須返回乙個畫刷控制代碼,windows 會使用該畫刷來繪製控制項背景 子視窗背景 也就是說,改變 static 控制...

修改static控制項背景顏色和文字顏色

當 static 控制項或具有 es readonly 風格的 edit 控制項被繪製時,會向父視窗傳送 wm ctlcolorstatic 訊息。如果我們在視窗過程中處理該訊息,就必須返回乙個畫刷控制代碼,windows 會使用該畫刷來繪製控制項背景 子視窗背景 也就是說,改變 static 控制...

QT 修改控制項背景顏色

一.背景刷成黑色,前景色設為白色。方法一 paltette方式,經測試,該方法不會影響到其他控制項,推薦使用 qpalette bgpal palette bgpal.setcolor qpalette background,qcolor 0,0 0,255 qpalette background,...