vc自定義類設定按鈕的字型和顏色

2022-09-02 02:54:12 字數 3401 閱讀 8582

以下為具體的實現方法:

加入乙個新類,類名:cmybutton,基類:cbutton。

在標頭檔案 mybutton.h 中加入以下變數和函式定義:

private:

int         m_style;    //按鈕形狀(0-正常,1-當前,2-按下,3-鎖定)

bool        b_inrect;           //滑鼠進入標誌

cstring     m_strtext;          //按鈕文字

colorref    m_forecolor;        //文字顏色

colorref    m_backcolor;        //背景色

colorref    m_lockforecolor;    //鎖定按鈕的文字顏色

crect       m_butrect;          //按鈕尺寸

cfont*      p_font;             //字型

void  drawbutton(cdc *pdc);     //畫正常的按鈕

// 介面函式

public:

void settext(cstring str);

void setforecolor(colorref color);      //設定文字顏色

void setbkcolor(colorref color);        //設定背景顏色

void settextfont(int fonthight,lpctstr fontname);   //設定字型

在 mybutton.cpp 的建構函式中初始化變數:

cmybutton::cmybutton()

用classwizard新增下列訊息函式:

presubclasswindow();

drawitem();

onmousemove();

onlbuttondown();

onlbuttonup();

在各函式內加入**:

void cmybutton::presubclasswindow()

presubclasswindow()在按鈕建立前自動執行,所以我們可以在其中做一些初始工作。這裡我只做了一項工作,就是為按鈕設定屬性為「自繪」式,這樣,使用者在新增按鈕後,就不需設定「owner draw」屬性了。

void cmybutton::drawitem(lpdrawitemstruct lpdrawitemstruct)

drawitem()函式是乙個關鍵函式,按鈕的繪製工作就在這裡進行,它的作用相當於對話方塊中的onpaint()函式和檢視中的ondraw()函式。

這裡我做了三項工作:獲取按鈕尺寸、獲取按鈕文字、繪製按鈕。其中繪製工作在自定義函式drawbutton()中完成。以下就是繪製過程:

void cmybutton::drawbutton(cdc *pdc)

//繪製按鈕背景

cbrush brush;

brush.createsolidbrush( m_backcolor );    //背景刷

pdc->selectobject( &brush );

cpen pen;

pen.createpen(ps_solid, 1, bcolor );

pdc->selectobject( &pen );

pdc->roundrect(&m_butrect,cpoint(5,5));   //畫圓角矩形

//繪製按鈕按下時的邊框

if( m_style!=2 )

//繪製按鈕文字

pdc->settextcolor( fcolor );        //畫文字

pdc->setbkmode( transparent );

pdc->drawtext( m_strtext, &m_butrect, dt_singleline | dt_center

| dt_vcenter | dt_end_ellipsis);

//繪製擁有焦點按鈕的虛線框

if( getfocus()==this )

}變數 m_style 表徵當前按鈕狀態,它的取值為:0-正常,1-當前,2-按下,3-鎖定。不同狀態下按鈕的邊框顏色和文字顏色有所不同。m_style 的值在滑鼠響應函式中進行修改。

繪製工作主要利用cdc類的繪圖函式完成,主要注意在 m_style 不同取值下表現出來的差別。

void cmybutton::onmousemove(uint nflags, cpoint point)

else

}cbutton::onmousemove(nflags, point);

}onmousemove()函式是滑鼠移動訊息函式,用於判定當前滑鼠指標是否在按鈕上。b_inrect是個標誌,為true表示滑鼠指標進入了按鈕區域,此時要捕獲滑鼠,讓滑鼠命令傳送給按鈕。當滑鼠指標離開按鈕時,要清除b_inrect標誌,並且釋放捕獲的滑鼠,讓其它視窗可以接收滑鼠命令。

invalidate()函式用於更新按鈕,它會自動呼叫drawitem()函式重新繪製按鈕。

設定條件的目的是僅在滑鼠指標進入按鈕和離開按鈕時更新按鈕,這樣可以防止滑鼠在按鈕上移動時發生閃爍。

void cmybutton::onlbuttondown(uint nflags, cpoint point)

onlbuttondown()函式是單擊滑鼠左鍵時的訊息函式。這裡只是重新繪製按鈕,具體的單擊響應應該在擁有按鈕的對話方塊或檢視中進行。

void cmybutton::onlbuttonup(uint nflags, cpoint point)

onlbuttonup()函式是單擊滑鼠左鍵後彈起時的訊息函式。這裡也只是重繪按鈕,這樣能使按鈕在按下和彈起時有所不同,使按鈕看上去有動態效果。

介面函式是用 cmybutton類 定義的按鈕修改顏色、字型和按鈕文字的介面,由以下函式組成:

//設定按鈕文字

void cmybutton::settext(cstring str)

//設定文字顏色

void cmybutton::setforecolor(colorref color)

//設定背景顏色

void cmybutton::setbkcolor(colorref color)

//設定字型(字型高度、字型名)

void cmybutton::settextfont(int fonthight,lpctstr fontname)

由於新字型由 new 生成,必須顯式**,這項工作可以在 cmybutton類 的析構函式中進行:

cmybutton::~cmybutton()

這樣乙個可設定顏色、字型的按鈕類就做好了。使用時,先在對話方塊中放置好按鈕,再用 classwizard 為按鈕新增控制變數,並且將變數的型別設定為 cmybutton。之後,可以用該變數呼叫介面函式設定按鈕顏色和字型。具體情況可以參考示例程式。

設定自定義按鈕

public class mainactivity extends activity package com.example.togglebuttoncustomdemo import android.content.context import android.graphics.bitmap im...

vc建立自定義按鈕

可設定字型和顏色的按鈕 要想修改cbutton類按鈕背景顏色和文字顏色,必須利用自繪方法對按鈕進行重新繪製。這可以通過定義乙個以cbutton為基類的新按鈕類來實現。以下為具體的實現方法 加入乙個新類,類名 cmybutton,基類 cbutton。在標頭檔案 mybutton.h 中加入以下變數和...

vc可設定字型和顏色的按鈕

以下為具體的實現方法 加入乙個新類,類名 cmybutton,基類 cbutton。在標頭檔案 mybutton.h 中加入以下變數和函式定義 private int m style 按鈕形狀 0 正常,1 當前,2 按下,3 鎖定 bool b inrect 滑鼠進入標誌 cstring m st...