MFC修改button的顏色 背景 邊框

2021-07-15 06:29:31 字數 1743 閱讀 4485

mfc的button控制項是乙個不同於其他控制項,其cbuttton類是cwnd的乙個子類,在修改button的背景、顏色和邊框的時候必須自己進行編寫乙個新的類,如cmybutton。下面是進行背景、顏色、邊框修改的步驟:

1.在專案->新增類->cmybutton。這樣會自動生成兩個檔案,乙個.cpp檔案和乙個.h檔案。例如cmybutton.cpp和cmybutton.h

2.在你的主工程的標頭檔案c**dlg.h中新增對cmybutton.h的包含,即  #include  「cmybutton.h」

3.找到oninitdialog()函式,在該函式裡面新增如下**:

cmybutton m_btn;//定義乙個cmybutton的變數,可以在其他地方進行定義,只需要包含 「cmybutton.h」 即可

//將按鈕修改為bs_ownerdraw風格,允許button的採用自繪模式

getdlgitem(idc_button1)->modifystyle(0,bs_ownerdraw,0);

//繫結控制項idc_button1與類cmybutton,響應過載函式drawitem()

m_btn.attach(idc_button1,this);

//設定button down的背景色,setdowncolor()和setupncolor()是cmybutton類中的析構函式

m_btn.setdowncolor(rgb(255,0,0));

//設定button up的背景色

m_btn.setupcolor(rgb(0,0,255));

注:若控制項idc_button1在以前進行過訊息繫結,那麼就會出現bug,只需要在對映函式dodataexchange()中將訊息繫結的語句注釋掉就行了。如下:

//ddx_control(pdx, idc_button1, m_cbbtn);//注釋掉就可以了。

4.在新建的cmybutton.cpp檔案和cmybutton.h檔案中新增下面**即可:

標頭檔案:cmybutton.h如下:

#pragma once

#include "afxwin.h"

class cmybutton : public cbutton

;原始檔:cmybutton.cpp

#include "stdafx.h"

#include "cmybutton.h"

cmybutton::cmybutton(void)

cmybutton::~cmybutton(void)

bool cmybutton::attach(const uint nid,cwnd* pparent)

void cmybutton::setdowncolor(colorrefcolor)

void cmybutton::setupcolor(colorref color)

void cmybutton::drawitem(lpdrawitemstructlpdrawitemstruct)

else//當按鈕不操作或者彈起時

if ((lpdrawitemstruct->itemstate&ods_selected)&&(lpdrawitemstruct->itemaction &(oda_select|oda_drawentire)))

if (!(lpdrawitemstruct->itemstate &ods_selected) &&(lpdrawitemstruct->itemaction & oda_select))

dc.detach();

}

MFC修改Button背景顏色和字型顏色

afx msg void ondrawitem int nidctl,lpdrawitemstruct lpdrawitemstruct 修改button背景顏色和字型顏色 void cskindlg ondrawitem int nidctl,lpdrawitemstruct lpdrawitem...

MFC 修改字型的顏色

一 使用onctlcolor修改 2 cwnd onctlcolor描述 1 類嚮導 訊息 新增wm ctlcolor訊息。2 手動新增。a h檔案中新增控制代碼刷子的宣告afx msg hbrush onctlcolor cdc pdc,cwnd pwnd,uint nctlcolor b cpp...

MFC修改介面和控制項顏色

重新on wm paint on wm ctlcolor 訊息對應的函式onpaint onctlcolor 一 onpaint cdialogex onpaint crect rect cpaintdc dc this getclientrect rect dc.fillsolidrect rec...