關於WM_CTLCOLOREDIT的處理的一些問題

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.