WEB开发网
开发学院软件开发VC 用VC6扩展CButton类制作风格独特的按钮 阅读

用VC6扩展CButton类制作风格独特的按钮

 2008-01-19 20:25:53 来源:WEB开发网   
核心提示:一、 本文介绍一个CButton的派生类CLinkButton,用此派生类制作的按钮具有以下特点:1、按钮的外观类似静态控件类CStatic 产生的对象,用VC6扩展CButton类制作风格独特的按钮,(参见图一)图一2、当鼠标的光标移到按钮上,但并未按下时, 在派生类中重载基类CButton的虚函数: vir

一、 本文介绍一个CButton的派生类CLinkButton,用此派生类制作的按钮具有以下特点:

1、按钮的外观类似静态控件类CStatic 产生的对象。(参见图一)

图一

2、当鼠标的光标移到按钮上,但并未按下时,光标改变形状,字体改变形状;按钮类似应用在工具条和菜单上的扁平钮效果。(参见图二)

图二

3、当按钮按下的情形:(参见图三)

图三

二、下面具体描述这种按钮的实现方法和步骤:

  • 在VC6的IDE环境中,生成一个基于对话框的PROJECT。
  • 将对话框资源中按钮的属性页打开,在“Style”标签页中选取按钮的“Owner Draw”(自绘)属性。
  • 将光标引入到应用程序的资源中。
  • 利用CLASSWIZARD,用CButton为基类,派生一个新类:CLinkButton。
  • 在派生类中重载基类CButton的虚函数: virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)   之所以要重载这个函数是因为选择了按钮的 “Owner Draw”属性后,当按钮的可视行为发生变化时,应用程序的框架要调用这个函数来重新绘制按钮。
  • 定制以下的消息处理:afx_msg void OnMouseMove(UINT nFlags, CPoint point);
       afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
       afx_msg void OnTimer(UINT nIDEvent);
       afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
       afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
       afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
       afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  • 声明类成员变量定义: //定义字体变量
       CFont fUnderline;
       //定义光标变量
       HCURSOR hHand;
       //决定按钮是否按下
       bool bLBtnDown;
       //决定鼠标是否在按钮上
       bool bHighlight;

1 2  下一页

Tags:VC 扩展 CButton

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接