VC 製作帶彈出式選單的按鈕

2021-08-06 00:03:19 字數 1852 閱讀 3738

帶有彈出式選單的按鈕可以使乙個按鈕具有多項選擇功能,擴充套件了按鈕的功能,相當於把多個按鈕整合於一體,可以減少按鈕數目。

這種按鈕的按鈕體分為兩個區域,單擊主體區域時,執行主體按鈕的功能,單擊選擇區域時,彈出乙個選單,可從中選擇要執行的功能。

下面,我們看一下它的製作過程:

一、新建乙個以cbutton類為基類的新類

單擊「insert」→「new class」,建立乙個新類。基類設定為cbutton,新類起名為cmenubutton。

二、利用自繪方法繪製按鈕,主體區顯示按鈕文字,選擇區畫乙個小箭頭

在cmenubutton類中用classwizard新增函式:presubclasswindow()和drawitem()。

presubclasswindow()函式在建立按鈕時執行,可用於做一些準備工作。在這裡我給按鈕新增自繪屬性:

void cmenubutton::presubclasswindow()

drawitem()函式用於繪製按鈕,左邊繪製按鈕文字,作為主體區,右邊繪製乙個小箭頭,作為選擇區。實際應用中,可根據具體需要繪製想要的形狀和內容。

void cmenubutton::drawitem(lpdrawitemstruct lpdrawitemstruct)

其中m_butrect都是crect型物件,在標頭檔案中進行定義。drawbutton()為繪製按鈕的函式,把它定義在外邊的目的是方便使用者修改,如果你想改變按鈕形狀,只需修改drawbutton()函式即可。

void cmenubutton::drawbutton(cdc *pdc)

point m_pt[3], m_ptcentre; //箭頭座標(三個頂點)

m_ptcentre = m_rrect.centerpoint(); //選擇區中點位置

m_pt[0].x = m_ptcentre.x-3; //計算箭頭座標

m_pt[0].y = m_ptcentre.y-2;

m_pt[1].x = m_ptcentre.x+4;

m_pt[1].y = m_ptcentre.y-2;

m_pt[2].x = m_ptcentre.x;

m_pt[2].y = m_ptcentre.y+2;

pdc->selectstockobject( black_brush ); //定義畫刷(黑色)

crgn rgn;

rgn.createpolygonrgn( m_pt, 3, alternate );

pdc->paintrgn( &rgn ); //畫選擇區箭頭

pdc->settextcolor( m_forecolor ); //畫主體區文字

pdc->setbkmode( transparent );

pdc->drawtext( m_strtext, &m_lrect, dt_singleline | dt_center | dt_vcenter | dt_end_ellipsis);

}

m_state是個標誌,其值為0表示正常按鈕;1表示滑鼠進入按鈕,繪製暗線邊框;2表示在按鈕主體區按下滑鼠左鍵;3表示在按鈕選擇區按下滑鼠左鍵。

在m_state的不同取值下,繪製不同的按鈕邊框,可以增加按鈕的動態效果。

三、新增滑鼠響應函式

在cmenubutton類中用classwizard新增函式:onmousemove()、onlbuttondown()、onlbuttonup()。

onmousemove()函式用於響應滑鼠移動訊息,當滑鼠進入按鈕時,設定相應標誌,並重繪按鈕邊框,當滑鼠離開按鈕時,清除標誌,恢復原邊框。

如何製作帶彈出式選單的按鈕

帶有彈出式選單的按鈕可以使乙個按鈕具有多項選擇功能,擴充套件了按鈕的功能,相當於把多個按鈕整合於一體,可以減少按鈕數目。這種按鈕的按鈕體分為兩個區域,單擊主體區域時,執行主體按鈕的功能,單擊選擇區域時,彈出乙個選單,可從中選擇要執行的功能。下面,我們看一下它的製作過程 一 新建乙個以cbutton類...

製作彈出式選單

lonkil 很老的一篇關於選單的文章,還是不錯的。發出來吧!一 在資源編輯器中建立乙個選單資源 新建乙個選單資源,比如把選單的id號為idc popmenu。此選單有一項兩層,即有乙個可彈出的選單項,而此選單項的彈出內容即為將要建立的彈 出式選單的內容。如右圖,可彈出項 下的選單即為將要建立的彈出...

彈出式選單

彈出式選單 popmenu 大家都熟悉,在win98的桌面上單擊滑鼠右鍵彈出的選單就是彈出式選單。通常情況下,彈出式選單在滑鼠右鍵單擊時彈出,當然,也可以根據需要隨時彈出。在vc 5的mfc中,管理選單的類叫cmenu。下面我向大家介紹建立乙個彈出式選單的基本方法。一 在資源編輯器中建立乙個選單資源...