mfc 編輯框背景透明設定

2021-06-18 06:15:06 字數 3210 閱讀 4493

前幾天和風在這裡討論關於cedit控制項的透明問題。主要的目的就是要做乙個有圖形背景的edit控制項,經過一番努,終於做出了乙個還算象樣的edit控制項。

做乙個透明的edit控制項的主要問題是字元的輸出,在edit裡輸出的重新整理有幾個時機,乙個是在接收到鍵盤或滑鼠訊息的時候 ,還有就是在接收到wm_paint訊息。重新整理的時候也不是全部重畫,所以想通過在繼承的edit類中處理wm_paint訊息是行不通的。但是edit控制項自己總是知道怎麼去重新整理,因此只要給控制項發訊息,讓其自己來重新整理就可以了。通過使用spy++的得知需要重新整理有幾個時機,乙個是按鍵的時候,內容變化,另乙個是選擇變化的時候,前者edit控制項會接收到getctlcode和keyup 訊息,後者會接收到getctlcode和capturechange訊息或keyup訊息,因此在getctlcode裡呼叫redrawwindow來強迫edit重新整理 整個控制項。在redrawwindow中通過使用引數rdw_erase可以使控制項重畫背景,即呼叫onerasebkgnd(cdc* pdc),在該函式中重 畫背景。比較特殊的情況是按住滑鼠左鍵並來回拖動滑鼠的時候,這時候選擇要改變,接收的訊息是mousemove,為了正 確響應也要處理該訊息,但是在每乙個mousemove中都重新整理顯示的開銷太大,而且不可避免地有閃爍感,因此只有在滑鼠左 鍵按下的時候才重新整理顯示。

大概的**如下,主要是繼承了乙個cedit的物件ctpedit,使用的時候可以動態建立,或者採用subclass的方法。我用的是後者。

001.classctestdlg :publiccdialog

002.;

008.

009.//在oninitdialog中subclass對話方塊模板中的edit控制項

010.boolctestdlg::oninitdialog()

011.

016.

017.//在onctlcolor中設定背景的透明,要改變edit控制項字型的顏色也在這裡

018.

019.hbrushctestdlg::onctlcolor(cdc* pdc, cwnd* pwnd,uintnctlcolor)

020.

030.

031.returnhbr;

032.}

033.

034.//ctpedit物件

035.

036.classctpedit :publiccedit

037.}afx_msg

050.declare_message_map()

051.};

052.

053.//ctpedit的訊息響應函式如下

054.//畫背景圖

055.boolctpedit::onerasebkgnd(cdc* pdc)

056.

068.

069.//強迫edit控制項擦除背景,重寫字元

070.uintctpedit::ongetdlgcode()

071.

074.//記錄滑鼠左鍵是否按下

075.voidctpedit::onlbuttondown(uintnflags, cpoint point)

076.

081.

082.voidctpedit::onlbuttonup(uintnflags, cpoint point)

083.

089.

090.//如果左鍵按下並且拖動滑鼠就要重新整理顯示

091.voidctpedit::onmousemove(uintnflags, cpoint point)

092.

097.//初始化成員變數

098.ctpedit::ctpedit()

099.

MFC設定編輯框字型大小

1 首先,為edit控制項繫結乙個控制變數 m edit 2 然後,在對話方塊類中新增乙個成員變數cfont m ofont 注 此處必須是成員變數,不能是區域性變數。3 最後就是,利用setfont函式修改字型了,主要有兩種方式,可以在對話方塊的初始化函式oninitdialog中實現 1 法一 ...

MFC編輯框改變背景 顏色等

2009 07 29 17 57 26 分類 mfc 標籤 字型大小 大中小訂閱 vc 編輯框 改變背景 字型 文字顏色 長度限制 英文 漢字判斷 1。長度限制 on initdialog 中 m edit1.setlimittext 8 m edit1為編輯框的成員變數 或者 cedit pedt...

MFC組合框 編輯框

getdlgitem idc enablewindow false 設定初始狀態,編輯框獲取資訊的方式 變數 m edit m edit.format 操作組合框的資料 1 由於組合框內包含了列表框,所以列表框的功能都能夠使用。如可以利用 int addstring lpctstr lpszitem...