重繪編輯框CEdit 繼承CEdit方式

2021-10-08 10:08:54 字數 1122 閱讀 1721

編輯框是常用控制項之一,同時也是一種完全自實現較為繁瑣的控制項。本例實現了對編輯框的簡單的自繪製,在保留其自身的強大功能的前提下,實現了編輯框的邊框、背景、文字顏色以及禁用態的各種顏色的替換。

要想重繪,我們必須知道要繪什麼。通過觀察預設的編輯框我們可以很清楚的看到編輯框有三個最基礎的部分需要我們繪製,他們分別是3d邊框、背景和文字,再進一步分析我們會發現他們是乙個基本視窗的兩個部分,即客戶區和非客戶區。這樣一來我們就知道應該用什麼函式有針對性的繪製什麼區域了,由於提供了原始碼,這裡僅就基本原理和技術細節加以討論,不過多地羅列**。

為了繪製非客戶區,我過載了onncpaint函式,通過這個函式可以很輕鬆的去掉編輯框3d外觀,畫成我們自己想要的形式。至於客戶區,為了保留編輯框游標閃爍、字元處理、自動回行等功能,我並未過載onpaint函式。也就是說我並未重繪客戶區,而是選擇了乙個替代的辦法。

我們使用編輯框,用的就是它的文字編輯功能,而我們想要改變的只是文字及背景顏色。通過這種分析我們就會很清楚我們需要做的事情,那就是設定文字顏色和背景色。我用的方法是過載ctlcolor函式,在其中根據編輯框禁用和啟用的不同狀態,設定了不同的顏色,很好的實現了預期目的。

從嚴格意義上來說,我並沒有對編輯框重繪,只是簡單的繪製了邊緣,但同樣很好的實現預期的效果。當然這個例子還有許多的不盡人意的地方,如果大家有更好的方還希望我們一同交流。

1. 主要實現內容

顯示主要有: 邊框, 背景, 文字顏色, 禁用態的各種顏色.

2. 邊框

邊框可以通過過載onncpaint實現. 

例如:void cmyedit::onncpaint()

3. 背景

背景可以通過過載onerasebkgnd實現

bool cmyedit::onerasebkgnd(cdc* pdc)

你也可以貼圖:

bool cmyedit::onerasebkgnd(cdc* pdc)

4. 字型顏色

hbrush cmyedit::ctlcolor(cdc* pdc, uint nctlcolor)

這裡需要注意的是,設定透明是在=wm_ctlcolor裡設定的,不是在wm_ctlcolor中.

有=的是從父視窗反射回來的訊息.當然也可以在父視窗的wm_ctlcolor中設定透明,不過這樣就封裝得不好了.

自繪編輯框

原始檔 編輯框是常用控制項之一,同時也是一種完全自實現較為繁瑣的控制項。本例實現了對編輯框的簡單的自繪製,在保留其自身的強大功能的前提下,實現了編輯框的邊框 背景 文字顏色以及禁用態的各種顏色的替換。要想重繪,我們必須知道要繪什麼。通過觀察預設的編輯框我們可以很清楚的看到編輯框有三個最基礎的部分需要...

自繪編輯框

原始檔編輯框是常用控制項之一,同時也是一種完全自實現較為繁瑣的控制項。本例實現了對編輯框的簡單的自繪製,在保留其自身的強大功能的前提下,實現了編輯框的邊框 背景 文字顏色以及禁用態的各種顏色的替換。要想重繪,我們必須知道要繪什麼。通過觀察預設的編輯框我們可以很清楚的看到編輯框有三個最基礎的部分需要我...

CEdit編輯框透明的實現

只是為了存下來,慢慢研究 實現方法1 直接在對話方塊中 hbrush clogindlg onctlcolor cdc pdc cwnd pwnd uint nctlcolor if nctlcolor ctlcolor static return hbr 如果只是這樣的話,編輯框無法回格刪除,所以...