新舊MFC版本CEdit透明的2種實現方法

2021-07-14 18:29:00 字數 1042 閱讀 5613

最近修改了一下繪演算法,因為沒有總是繪製整個字串的必要性。以有後空了,還會完善滑鼠事件下的演算法。

mfc 4.2(visual studio 6)實現起來很方便,只需要在對話方塊類下處理wm_ctlcolor訊息,然後以下**即可:

hbrush calphaeditboxdlg::onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor) 

void calphaeditboxdlg::onkillfocuseditkey() 

void calphaeditboxdlg::onkillfocuseditmessage()

void calphaeditboxdlg::onkillfocuseditpath()

不要忘了,如果刪除字元,要重繪一下背景哦。這裡只羅列了一部分。

新版的mfc可謂相當麻煩,因為把背景設為clr_none或者畫刷設為hollow_brush,微軟會缺省會制黑色背景,這一點,微軟真是倒退了。廢話少說了,編輯控制項子類化無可避免了,一定要處理wm_paint、wm_char、wm_lbuttondown、wm_lbuttonup這幾個訊息。如果你想去掉編輯控制自帶的邊框,還得處理wm_ncpaint訊息,不過這裡什麼**都不寫,目的是為避免執行預設的cdialogex::onncpaint()方法給畫上邊框。下面**實現基本的透明效果,正常輸入沒問題,如果你想要實現刪除、選中與取消選中等功能,請追加處理wm_lbuttondown、wm_lbuttonup訊息。

//

//繪製視窗。

//void cmyedit::onpaint()

////暫不處理粘滯按鍵和功能鍵這2種情況。

//void cmyedit::onchar(uint nchar, uint nrepcnt, uint nflags)

以上就是這些了,歡迎一起交流如何實現注釋中寫明的沒有實現有功能。我是菜鳥,大蝦請勿見笑。希望你能多多指點。

關於CEdit控制項的透明

關於cedit控制項的透明 前幾天和風在這裡討論關於cedit控制項的透明問題。主要的目的就是要做乙個有圖形背景的edit控制項,經過一番努,終於做出了乙個還算象樣的edit控制項。做乙個透明的edit控制項的主要問題是字元的輸出,在edit裡輸出的重新整理有幾個時機,乙個是在接收到鍵盤或滑鼠訊息的...

MFC的CEdit多行編輯

en change 編輯框的內容被使用者改變了。與en update不同,該訊息是在編輯框顯示的正文被重新整理後才發出的。en errspace 編輯框控制項無法申請足夠的動態記憶體來滿足需要。en hscroll 使用者在水平滾動條上單擊滑鼠。en killfocus 編輯框失去輸入焦點。en m...

關於CEdit控制項的透明(重繪)

摘自 做乙個透明的edit控制項的主要問題是字元的輸出,在edit裡輸出的重新整理有幾個時機,乙個是在接收到鍵盤或滑鼠訊息的時候 還有就是在接收到wm paint訊息。重新整理的時候也不是全部重畫,所以想通過在繼承的edit類中處理wm paint訊息是行不通的。但是edit控制項自己總是知道怎麼去...