龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

用VC制作带弹出式菜单的按钮

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
带有弹出式菜单的按钮可以使一个按钮具有多项选择功能,扩展了按钮的功能,相当于把多个按钮集成于一体,可以减少按钮数目。 这种按钮的按钮体分为两个区域,单击主体区域时,

  带有弹出式菜单的按钮可以使一个按钮具有多项选择功能,扩展了按钮的功能,相当于把多个按钮集成于一体,可以减少按钮数目。

  这种按钮的按钮体分为两个区域,单击主体区域时,执行主体按钮的功能,单击选择区域时,弹出一个菜单,可从中选择要执行的功能。

  下面,我们看一下它的制作过程:

  一、新建一个以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 );

收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!
按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接