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

2021-10-01 11:09:59 字數 3227 閱讀 5285

當 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;

}

lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)

return 0;

}

執行結果:

上圖中,我們的**只是改變了控制項的背景顏色(整個子視窗的背景顏色),卻忽略了文字的背景顏色。

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

複製

純文字複製

colorref

setbkcolor

(hdc

hdc,

//裝置環境控制代碼

colorref

crcolor //背景顏色

);

colorref setbkcolor(

hdc hdc, //裝置環境控制代碼

colorref crcolor //背景顏色

);

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

複製

純文字複製

colorref

settextcolor

(hdc

hdc,

//裝置環境控制代碼

colorref

crcolor //背景顏色

);

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;

}

lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)

return 0;

}執行結果:

所以要想達到修改背景顏色的目的,除了修改static 控制項的背景顏色,還要修改文字的背景顏色。

實現透明背景需要設定文字背景顏色透明,同時返回沒有顏色的畫刷。

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

複製

純文字複製

int

setbkmode

(hdc

hdc,

//裝置環境控制代碼

int ibkmode //背景模式

);

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);

//無顏色畫刷

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,...