vc建立自定義按鈕

2021-06-26 07:38:26 字數 3392 閱讀 7693

可設定字型和顏色的按鈕

要想修改cbutton類按鈕背景顏色和文字顏色,必須利用自繪方法對按鈕進行重新繪製。這可以通過定義乙個以cbutton為基類的新按鈕類來實現。以下為具體的實現方法:

加入乙個新類,類名: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(); // 這個是重寫不是的wm_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。之後,可以用該變數呼叫介面函式設定按鈕顏色和字型。具體情況可以參考示例程式。

建立自定義的選單與按鈕

基於許可權控制的考慮,在整個後台的開發中,選單和按鈕是可以被自定義的,也就是說 1 每開發乙個頁面,就需要在系統管理的 選單管理 中進行設定 2 每個頁面中的按鈕,也是在 選單管理 中的設定按鈕部分進行設定 具體步驟如下 一 建立頁面與選單的對應管理 比如,現在我們建立了乙個頁面,該頁面使用者展示頁...

Android 自定義按鈕

將按鈕的背景顏色設定成drawable檔案即可。雖然這裡講的是button,但是textview及其子元件也可以如法炮製 主布局檔案如下 下面三個檔案都放在drawable hdpi資料夾下,第乙個是my button selector.xml,定義了按鈕的不同狀態 my button presse...

設定自定義按鈕

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