標籤:style class blog code http tar
在為duilib封裝系統控制項的過程中, 再一次遇到了系統EDIT控制項文字顏色/文字背景顏色的處理問題. 不要小看這個訊息, 她很可能不會讓你如願以償.
其實我要的目的很簡單:
1. 改變文字顏色
2. 改變文字背景顏色
下面列舉我遇到的幾種可以說成是有點奇葩的現象
不自動重新整理其餘部分背景
代碼:
static HBRUSH hbr;SetTextColor(HDC(wParam), RGB(0,255,0));if(!hbr) hbr = CreateSolidBrush(RGB(255,0,0));return LRESULT(hbr);
效果:
看似正常, 實際不正常
代碼:
static HBRUSH hbr;SetTextColor(HDC(wParam), RGB(0,255,0));SetBkMode(HDC(wParam), TRANSPARENT);if(!hbr) hbr = CreateSolidBrush(RGB(255,0,0));return LRESULT(hbr);
效果:
BUG:
當嘗試刪除某些常值內容時會出現無法刪除!(游標移動了,但內容還在)
當內容增多, 出現捲軸後, 並嘗試拖動捲軸時:
正確的處理方式
實際上, 一開始我把文本顏色/文本背景/背景畫刷搞混淆了, 所以才會出現各種堪稱奇葩的效果.
根據 Paint problem when handling WM_CTLCOLOREDIT 的回答, 不能使用 SetBkMode 來設定透明!
設定文字顏色:
SetTextColor
設定文字背景顏色:
SetBkColor
設定沒有文字的地區的背景畫刷顏色:
返回畫刷控制代碼
測試代碼:
static HBRUSH hbr;SetTextColor(HDC(wParam), RGB(0,255,0));SetBkColor(HDC(wParam), RGB(150,0,0));if(!hbr) hbr = CreateSolidBrush(RGB(150,0,0));return LRESULT(hbr);
女孩不哭 @ cnblogs.com/memset @ 2014-06-24