mfc 自繪 學習小總結

2021-09-01 21:42:36 字數 1379 閱讀 9010

mfc的標準控制項比較醜,所以需要自繪

1:建立mfc控制項的時候要加入ws_owner* 風格, 然後過載標準控制項的虛函式

bs_ownerdraw  

2: onpaint 方法 即 wm_paint訊息很重要

動態加入資源,cimage物件 ,然後呼叫 draw(hdc控制代碼,crect)  繪製上去,利用將醜陋的灰色的窗體draw上去

然後滑鼠事件相應怎麼辦:

過載訊息響應, 監聽mouse的event onmousehover  onmouseclick   滑鼠三態訊息 進行書寫實現**

我們不知道滑鼠時候離開所以要加入tagmouseevent訊息 進行響應。設定乙個漢奸 讓其告訴我們滑鼠的位置

窗體最大化 最小化時候的控制項位置問題

通常乙個窗體 left center  right  ,最大化時候 left  right不變 center 根據getcliectrect動態獲取大小 減去左右兩邊的width 我們通常這樣做。

還有就是我們通常建立工程的時候建立dialog 工程,自己利用客戶區模擬非客戶區進行自繪,

invalidate()

動態loadfromresource(afxgetinstancehandle(), );

create方法 讓成員變數 放置在面板上   create方法指定位置和相關聯的控制代碼

自繪:wm_paint訊息  onpaint

draw函式

m_imgtool.draw(dc.m_hdc, rcclient);  //當前dc的控制代碼

cdc dc;

dc.attach(hdc); 

crect rcicon = rcitem;

dc.setbkmode(transparent);  設定背景透明 則就不會出現灰色的背景

dc.detach();

measureitem

自繪的時候 處處都要拿到crect    左上角的座標  右下角的座標

onsize:

movewindow 建立完後要發生size大小變化 所以要執行movewindow

oncreate:

cwnd::create方法  讓控制項載入到當前的wnd上,指明座標和位置

onpaint :

draw方法  

mousehover   mouseclick:

動態建立乙個cbutton按鈕並實現其on_bn_clicked訊息

實現:

一、建立按鈕

二、實現on_bn_clicked訊息

MFC自繪按鈕

1.建立乙個基於對話方塊的程式 2.在這裡,我是將 確定 按鈕重繪,拉大 確定 按鈕 如下 修改為自繪 3.新增位 件id為iidb bitmap1 4.新增類cmybutton基類為cbutton 後面兩個函式是我自己新增的,其中drawitem函式在基類中為虛函式,我們在派生類中過載,負責按鈕的...

MFC自繪控制項

1.c 中drawitem 函式不被呼叫的問題 自繪乙個cmybutton的時候,在drawitem 中改變了button的顏色,但是在程式執行時,drawitem 函式並沒有被執行,原因在於按鈕的型別並不是bs ownerdraw,所以我們需要把它改為 所有者繪製 解決方法 可以過載乙個presu...

MFC之自繪控制項

在描繪mfc介面時,mfc自帶的控制項樣式是絕對不滿足介面的需求的。所以我們就要在mfc自帶控制項基礎上對控制項樣式進行重繪。在採用自繪前介面樣式 採用自繪後介面樣式 是不是自繪控制項後看起來正常了很多?自繪控制項的步驟 我們以做乙個關閉按鈕為例 先建立乙個mfc類繼承自cbutton。給這個類新增...