程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 用VC制作帶彈出式菜單的按鈕

用VC制作帶彈出式菜單的按鈕

編輯:vc教程

  帶有彈出式菜單的按鈕可以使一個按鈕具有多項選擇功能,擴展了按鈕的功能,相當於把多個按鈕集成於一體,可以減少按鈕數目。

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

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

  一、新建一個以CButton類為基類的新類

  單擊“Insert”→“New Class”,建立一個新類。基類設置為CButton,新類起名為CMenuButton。

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

  在CMenuButton類中用ClassWizard添加函數:PreSubclassWindow()和DrawItem()。

  PreSubclassWindow()函數在建立按鈕時執行,可用於做一些准備工作。在這裡我給按鈕添加自繪屬性:

void CMenuButton::PreSubclassWindow()
{
 ModifyStyle( 0, BS_OWNERDRAW ); //設置按鈕屬性為自繪式

 CButton::PreSubclassWindow();

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

void CMenuButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
 CDC *pDC = CDC::FromHandle( lpDrawItemStruct->hDC );
 m_ButRect = lpDrawItemStruct->rcItem; //獲取按鈕尺寸
 int nSavedDC = pDC->SaveDC();
 VERIFY( pDC );

 DrawButton(pDC); //繪制按鈕

 pDC->RestoreDC( nSavedDC );

  其中m_ButRect都是CRect型對象,在頭文件中進行定義。DrawButton()為繪制按鈕的函數,把它定義在外邊的目的是方便用戶修改,如果你想改變按鈕形狀,只需修改DrawButton()函數即可。

void CMenuButton::DrawButton(CDC *pDC)
{
 m_LRect.SetRect( m_ButRect.left, m_ButRect.top,
 m_ButRect.right-21, m_ButRect.bottom ); //按鈕主體區尺寸
 m_RRect.SetRect( m_ButRect.right-20, m_ButRect.top,
 m_ButRect.right, m_ButRect.bottom ); //按鈕選擇區尺寸

 CPen Pen;
 Pen.CreatePen(PS_SOLID, 1, RGB(192,192,192) );
 pDC->SelectObject( &Pen );

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 4
  • 5
  • 下一頁
  • 尾頁
  • 共6頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved