自定义按钮类

原创 2012年03月29日 12:03:43

 

1.       新建一个MFC类,名称为CCustomButton,父类CButton

2.       构造函数中初始化按钮字体

      CCustomButton::CCustomButton()

{

       Font.CreateFont( 12, 0, 0, 0, FW_HEAVY, 0, 0, 0, ANSI_CHARSET, \

              OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, \

              VARIABLE_PITCH | FF_SWISS, "MS Sans Serif" );

}

3.       改写按钮类的DrawItem虚方法

void CCustomButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

{

       // TODO: Add your code to draw the specified item

              if (lpDrawItemStruct->CtlType==ODT_BUTTON )

       {

              CDC *pBtnDC = CDC::FromHandle(lpDrawItemStruct->hDC);       //获取按钮关联的DC

       //获取按钮的绘画区域

       CRect BtnRC = lpDrawItemStruct->rcItem;

       //获取按钮的当前状态

       int BtnState = lpDrawItemStruct->itemState;

      

       //获取按钮文本

       CString BtnText;

       GetWindowText(BtnText);

 

       CBrush           Brush;

       CBrush           *pOldBrush;

       CPoint           PT(2,2);

      

       pBtnDC->SelectObject(&Font);

       pBtnDC->SetTextColor( RGB( 255, 255, 250 ) );

       //如果按钮获得焦点或按钮被选中

       if (BtnState & ODS_SELECTED || BtnState & ODS_FOCUS)

       {

              Brush.CreateSolidBrush( RGB( 160, 160, 160 ) );

              pBtnDC->SetTextColor( RGB( 50, 50, 250 ) );

       }

       else

       {

              CBitmap bmp;

              bmp.LoadBitmap(IDB_BITMAP1);

              Brush.CreatePatternBrush(&bmp);

       }

       pOldBrush = pBtnDC->SelectObject( &Brush );

       pBtnDC->RoundRect(&BtnRC, PT);

 

       pBtnDC->SetBkMode(TRANSPARENT);

       pBtnDC->DrawText(BtnText, &BtnRC, DT_CENTER | DT_VCENTER | DT_SINGLELINE);

       pBtnDC->DeleteDC();  

       Brush.DeleteObject();

       }    

}

4.       设置按钮的Owner Draw属性为True.这时按钮没有回车响应,需要截获回车键按下和抬起的消息响应

BOOL CCustomButton::PreTranslateMessage(MSG* pMsg)

{

       if(pMsg->hwnd==this->GetSafeHwnd()&&pMsg->message==WM_KEYDOWN && pMsg->wParam==13)

       {

              pMsg->lParam=0;

              pMsg->message=WM_LBUTTONDOWN;

       }

       if(pMsg->hwnd==this->GetSafeHwnd()&&pMsg->message==WM_KEYUP && pMsg->wParam==13)

       {

              pMsg->lParam=0;

              pMsg->message=WM_LBUTTONUP;

       }

       return CButton::PreTranslateMessage(pMsg);

}

5.       在需要重绘按钮的对话框中引用自定义类,然后CCustomButton m_BTLogin;

6.            CDialog::DoDataExchange(pDX);

       //{{AFX_DATA_MAP(CLogin)后加入DDX_Control(pDX, IDC_LOGIN, m_BTLogin);

 

VC++界面编程之--自定义CButton(按钮)皮肤

在VC++ WTL编程中,利用CustomDraw自绘的方法,可以很轻松地实现按钮的自绘效果。 我利用了此方法,制作了一个CCustomButton类,实现了如下效果的控件,其支持普通的按钮风格,并也...
  • renstarone
  • renstarone
  • 2013年09月05日 20:42
  • 6414

android自定义按钮类

1.创建java类 :继承自android.app.Button类,实现父类三个构造方法.其中通过布局添加的按钮,会通过第二个构造方法实例化。 public class MyButton exten...
  • mr_orange_klj
  • mr_orange_klj
  • 2015年01月17日 01:18
  • 391

cocos2d-x自定义按钮类

#ifndef __ControlButton_H__ #define __ControlButton_H__ #include "cocos2d.h" #include "cocos-ext....
  • leansmall
  • leansmall
  • 2015年07月29日 09:01
  • 527

自定义按钮:定位+video+javascript

视频播放器
  • SJ_LPL_SB
  • SJ_LPL_SB
  • 2017年12月01日 14:03
  • 118

Qt 自定义按钮

按钮有三种状态,正常,鼠标滑过,鼠标左键anxia
  • tujiaw
  • tujiaw
  • 2014年06月22日 20:09
  • 4954

Qt学习之路之自定义按钮

首先,在此感谢博主:http://blog.sina.com.cn/liang19890820 按钮有三种状态:当鼠标点击的时候,当鼠标进入按钮的时候,当鼠标没有进入按钮的时候,这3个不同的状态。 上...
  • HK_5788
  • HK_5788
  • 2014年12月24日 08:20
  • 1448

Happy coder :Qt 自定义 Button 之美

✿题记      上次经理批评我帮同事写现成代码的行为,他说:授之以鱼,不如授之以渔。我想想也对,可是【渔】很枯燥人家不爱学怎么办?      于是乎我想,授之以渔,不如授之以渔为娱。✿正文     ...
  • yiyaaixuexi
  • yiyaaixuexi
  • 2011年08月21日 20:56
  • 23201

iOS自定义UIButton的实现

最近的项目中遇见的自定义的UIButton的情况出现很多种。有的时候觉得要是放几个控件一拼接也可以达到效果。似乎有点太low!!!于是乎就自定义自己的button了。 先看看几个效果 如图1:...
  • whuizhou
  • whuizhou
  • 2016年01月26日 14:38
  • 1432

Blend创建一个自定义按钮

本笔记涉及内容: 1.在Expression Blend创建一个自定义按钮 2.为定制控件增加视觉状态效果 3.创建横幅文本的动画 1 在Expression Blend创建一个自定义按钮一般而...
  • jazywoo123
  • jazywoo123
  • 2012年03月30日 23:21
  • 2440

自定义按钮

在建立网站时发现vs2005按钮的样式与网站的风格相差太远,而用css定义的话每加一个就要加载相应的css类,所以决定要自己做一个,比如我在css表上有这样两个分类.btn1_mouseout   {...
  • gdsimon
  • gdsimon
  • 2008年12月26日 00:19
  • 439
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义按钮类
举报原因:
原因补充:

(最多只允许输入30个字)