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

2022-05-10 14:57:20 字數 2015 閱讀 7721

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