一个带剪裁区域,工具提示和鼠标跟踪的皮肤按钮CxSkinButton类

翻译来源:  https://www.codeproject.com/Articles/1014/CxSkinButton

这个类很常见,在很多源码中都有见到。

MFC用CxSkinButton.cpp和CxSkinButton.h

之前用到过的案例:对话框背景图六种方法-PictureEx类实现对话框背景图和xSkinButton类实现按钮样式

此类并不能加载png图片,加载png图片按钮请加载png图片按钮GdipButton按钮类

一个带剪裁区域,工具提示和鼠标跟踪的皮肤按钮类

示例图像 -  sample.gif

通过这个课程,您可以通过几个步骤轻松地给你的按钮皮肤:

  1. xSkinButton.cppxSkinButton.h添加到项目中。
  2. 在定义控件的头文件中包含xSkinButton.h
  3. 为要自定义的每个按钮创建(或编辑)成员变量CxSkinButton如果类向导不显示CxSkinButton类型,请选择CButton然后手动编辑代码。
  4. 添加按钮的位图资源:
    • NORMAL位图:默认按钮图像。
    • DOWN位图:按下按钮图像。
    • OVER位图:(可选)当鼠标在按钮上方时显示的图像。如果为NULL,则将使用NORMAL位图。
    • DISABLED位图:(可选)图像为禁用状态。如果为NULL,则将使用NORMAL位图。
    • FOCUS位图:(可选)用于焦点状态的图像。如果为NULL,则将使用NORMAL位图。
    • MASK位图:(可选)裁剪区域。如果您不使用MASK,该按钮将是一个矩形所有者绘制控件。默认透明颜色为RGB(255,255,255)。
  5. 在窗口初始化中添加CxSkinButton方法:
    BOOL CxSkinButtonDemoDlg::OnInitDialog()
    {
    //    ...
        m_btn1.SetTextColor(RGB(255,0,0));
        m_btn1.SetToolTipText("Button1");
        m_btn1.SetSkin(IDB_B1NORM,IDB_B1DOWN,IDB_B1OVER,IDB_B1GRAY,
                           0,IDB_B1MASK,0,0,0);
    //    ...

    SetTextColorSetToolTipText是自我解释; SetSkin是:

    void CxSkinButton::SetSkin(UINT normal,UINT down,UINT over, 
                               UINT disabled, UINT focus,UINT mask, 
                               short drawmode, short border, 
                               short margin)
    • normal,down,over,disabled,focus,mask =位图资源ID
    • drawmode =如果mask不为NULL,则应为0(正常); 否则你可以尝试1(拉伸)或2(平铺)。
    • border = if mask不是NULL或不是矩形,这应该是0; 否则您可以尝试1在按钮周围绘制标准3D边框。
    • margin = if mask不为NULL或不是矩形,这应该是0; 否则您可以尝试更改此值以在控件具有焦点时在按钮上绘制一个虚线矩形。

备注

  • 自动添加BS_OWNERDRAW样式,您不需要在资源编辑器中设置“Owner draw”属性。
  • 只有NORMAL和DOWN位图是必不可少的; OVER位图是一个加号。
  • 如果按钮始终启用,则不需要禁用位图。您也可以使用按钮文字(自动蚀刻)显示禁用状态。
  • 如果按钮是矩形,则MASK位图不是必需的。
  • 对于矩形按钮,您应该设置margin参数大于0(4是一个不错的选择),或使用FOCUS位图。
  • 对于矩形按钮,您可以使用'flat'位图并将border参数设置为1.在这种情况下,NORMAL和DOWN位图也可以共享相同的资源。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值