65.9K
CodeProject 正在变化。 阅读更多。
Home

CxSkinButton

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.91/5 (52投票s)

2001年3月20日

CPOL
viewsIcon

596520

downloadIcon

15471

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

Sample Image - sample.gif

使用此类,您可以轻松地在几个步骤内为您的按钮添加皮肤

  1. xSkinButton.cppxSkinButton.h 添加到项目中。
  2. 在定义控件的头文件中包含 xSkinButton.h
  3. 为要自定义的每个按钮创建一个(或编辑)成员变量,类型为 CxSkinButton。如果Class Wizard没有显示CxSkinButton类型,请选择CButton,然后手动编辑代码。
  4. 为按钮添加位图资源
    • NORMAL位图:默认按钮图像。
    • DOWN位图:按下按钮图像。
    • OVER位图:(可选)鼠标悬停在按钮上时显示的图像。如果为NULL,将使用NORMAL位图。
    • DISABLED位图:(可选)禁用状态的图像。如果为NULL,将使用NORMAL位图。
    • FOCUS位图:(可选)焦点状态的图像。如果为NULL,将使用NORMAL位图。
    • MASK位图:(可选)裁剪区域。如果您不使用MASK,按钮将是一个矩形的owner-draw控件。默认透明颜色为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 = 如果 mask 不为 NULL 或不是矩形,则应为 0;否则,您可以尝试 1 以在按钮周围绘制标准的 3D 边框。
    • margin = 如果 mask 不为 NULL 或不是矩形,则应为 0;否则,您可以尝试更改此值以在控件具有焦点时在按钮上绘制一个点线矩形。

备注

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

发布历史

v1.00 - 2001/03/15
- 基本实现和接口。
v1.10 - 2001/03/28
增强的鼠标跟踪实现(由 Milan Gardian 提供)。
- SetCapture 已移除:加速器现在已分派。
- 双击处理。
- 在“按钮按下”(鼠标按钮按下并保持)阶段更好的行为
v1.20 - 2001/04/02
- 新的 CreateRgnFromBitmap() 实现。Mask 位图现在适用于任何显示颜色模式、任何 mask 颜色深度和任何 mask 大小。
v1.21 - 2001/04/14
- OnMouseLeave 转换错误已修复。
- 修复了 OVER 位图为 NULL 时的 FocusRect 缺陷。
v1.30 - 2001/04/25
- 修复了在 WinNT4.0 下的 CreateRgnFromBitmap 失败问题
v1.40 - 2001/06/29
- 添加了复选框和单选按钮。
- 添加了“focus”位图。
- 修复了 CreateRgnFromBitmap 错误。
- 修复了快捷方式错误。
- 修复了文本绘制代码。
v1.41 - 2001/10/27
- 修复了 CreateRgnFromBitmap 中的内存泄漏
v1.50 - 2008/07/07
- 修复了使用 SelectObjectGetDC 的内存泄漏(感谢 sachelis 和 Bernd Giesen)
- 添加了 SetToolTipColor(感谢 Mykel)

兼容性

Win95,WinNT = 是,需要 IE3.0 或更高版本
Win98, WinME, W2k, WinXP = 是

感谢所有 Code Project 开发者!
特别感谢:
Milan Gardian 提供了鼠标和键盘跟踪代码。
Fable(at)aramszu(dot)net 提供了 ExtCreateRegion 替换代码。
Rainer Mangold 提供了单选按钮和复选框代码。
Andy Green 和 Cameron Epp 提供了建议和调试。

© . All rights reserved.