zoukankan      html  css  js  c++  java
  • CBitmapButton实现图形按钮

    在编程中,经常要用到按钮控件,大部分情况下,文字按钮就OK了,但有时为了更好的效果,需要用到图形按钮。

    在MFC中,应用CBitmapButton就可以实现图形按钮。CBitmapButton类继承自CButton类。你可以为图形按钮指定四张图片,分别对应按钮的四种不同状态:

    正常显示(Up),鼠标按下(Down),获得焦点(Focused),不可用(Disabled)。

    正常显示(Up)状态的图片是必须的,其他三张图片是可选的。

    还有,按钮的Style必须指定为BS_OWNERDRAW.。

    以下是利用CBitmapButton实现图形按钮的实例:

    第一种方法:

    (一)在VC6下新建一对话框工程,在对话框界面上拉出一按钮控件

    指定按钮的Style为Owner Draw,即程式中得BS_OWNERDRAW样式。

    利用ClassWizard为按钮关联CButton类变量,然后将CButton类型手动改为CBitmapButton。

    (二)导入指定按钮四种状态的图片

    以下只导入了3张图片,分别对应Up,Down,Focused

    (三)在对话框的OnInitDialog函数中添加如下代码

    LoadBitmaps加载状态图片,注意顺序为Up,Down,Focused,Disabled。

    1 // TODO: Add extra initialization here  
    2 m_btnBitmap.LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUSED); //Disabled状态的图片没有制作
    3 m_btnBitmap.SizeToContent(); //调整按钮大小为图片大小

    第二种方法:利用SubclassDlgItem

    在界面中拉出一按钮控件后,不用关联变量,指定按钮的Style为Owner Draw,然后同上一样导入四张状态图片。创建CBitmapButton对象(注意不要创建函数的局部变量,否则在函数执行完毕时就销毁了),最好创建为对话框的成员变量,在对话框的OnInitDialog初始化函数中用LoadBitmaps加载图片,再利用SubclassDlgItem方法将该CBitmapButton与刚开始在界面上拉出的控件关联。按钮控件自动调整为和图片一样大小。

    代码如下:

    1 m_btnBitmap002.LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUSED);  
    2 m_btnBitmap002.SubclassDlgItem(IDC_BTN_TESTAUTO, this);
    3 //CBitmapButton test; //不可这样定义局部变量再关联
    4 //test.LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUSED);
    5 //test.SubclassDlgItem(IDC_BTN_TESTAUTO, this);

    第三种方法:应用CBitmapButton的AutoLoad方法自动为按钮加载图片

    BOOL AutoLoad(UINT nID, CWnd* pParent);

    我们不用指定图片的ID,那么程序是采取怎样的规则去加载图片的呢?

    规则:如果按钮控件的Caption为Test,则四张位图的ID应分别为“TestU”,“TestD”,“TestF”,“TestX”,分别对应Up,Down,Focused,Disabled状态。注意:""也是ID的一部分。

    所以步骤为:
    (一)在对话框中拉出按钮控件,Caption改为Test,指定按钮的Style为Owner Draw。

    (二)定义对话框的成员变量CBitmapButton   m_btnBitmap003;

    (三)导入四张状态位图,ID分别改为“TestU”,“TestD”,“TestF”,“TestX”。

    (四)在对话框的OnInitDialog中调用AutoLoad方法

    1 m_btnBitmap003.AutoLoad(IDC_BTNTEST, this);  

    这种方法按钮也会自动调整为和位图一样大小。





  • 相关阅读:
    权限管理的三级菜单的流程
    Django之extra
    Django-Rest-Framework的解析器和渲染器
    Django-Rest-Framework的权限和频率
    权限管理-一级菜单-二级菜单-三级菜单-路径导航和权限粒度控制到按钮级别
    Django-Rest-Framework的版本和认证
    【leetcode】Valid Number
    【leetcode】4Sum
    【leetcode】Preimage Size of Factorial Zeroes Function
    【leetcode】Champagne Tower
  • 原文地址:https://www.cnblogs.com/Hisin/p/2370636.html
Copyright © 2011-2022 走看看