當 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修改文字前景色(文字顏色)使用 settextcolor 函式,它的原型為:setbkcolor
(hdc
hdc,
//裝置環境控制代碼
colorref
crcolor //背景顏色
);
colorref這裡我們修改的是 static 控制項中的文字顏色,所以需要獲取 static 控制項的裝置環境控制代碼。非常巧妙的是,傳送 wm_ctlcolorstatic 訊息時,wparam 引數表示的就是 static 控制項的裝置環境控制代碼(lparam 表示控制項控制代碼)。settextcolor
(hdc
hdc,
//裝置環境控制代碼
colorref
crcolor //背景顏色
);
下面的**會修改文字的背景色和前景色:
lresult callback執行結果:wndproc
(hwnd
hwnd,
uint
message,
wparam
wparam,
lparam
lparam)
return0;
}
所以要想達到修改背景顏色的目的,除了修改static 控制項的背景顏色,還要修改文字的背景顏色。實現透明背景需要設定文字背景顏色透明,同時返回沒有顏色的畫刷。
1) setbkmode 函式可以用來設定文字的背景模式,它的原型為:
intibkmode 有下面兩種取值:setbkmode
(hdc
hdc,
//裝置環境控制代碼
int 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,...