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

CBitmapSlider

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.87/5 (78投票s)

2003 年 8 月 27 日

4分钟阅读

viewsIcon

297609

downloadIcon

17744

一个具有滑块功能的 CStatic 派生类。它使用位图进行皮肤设置。

Sample Image - CBitmapSlider.gif

引言

您需要一个滑块,但默认控件看起来太简单了吗?我希望这个名为 CBitmapSlider 的类能帮到您。您所要做的就是阅读这篇文章并制作一些位图。

特点

  • 通道和滑块都有透明效果。
  • 自定义滑块的大小。
  • 无闪烁。

它使用了 Keith Rule 文章中的 CMemDC 来实现双缓冲,并使用了 Raja Segar 文章中的函数来显示透明位图。

使用代码

  1. 将 "BitmapSlider.h", "BitmapSlider.cpp" 和 "memdc.h" 添加到您的项目中。
  2. 将位图插入或导入到您的项目的资源中。一个滑块最多可以使用四张位图(通道、活动通道、滑块、活动滑块)。通过位图的各种组合,控件可以呈现不同的外观。但是,有一些限制。

    • 通道位图和活动通道位图的大小必须相等。滑块位图和活动滑块位图的大小也必须相等。
    • 滑块的大小必须小于通道的大小。
    • 要使用活动状态的位图,必须存在普通状态的位图。

  3. 将控件添加到您的对话框资源中。

    可以使用 "Picture" 控件和 "Static Text" 控件。但如果您有通道的位图,我推荐使用 "Picture" 控件。如果您不使用通道的位图,请添加 "Static Text" 控件并确保将其大小调整为您想要的大小。

  4. 更改属性。

    将控件的 ID 从默认值 (IDC_STATIC) 更改为新的 ID。如果您添加了 "Picture" 控件,请将 "Type" 设置为 "Bitmap" 并选择您想要用作通道的位图的 ID 作为 "Image"。

    确保选中了 "Notify"。 "Tabstop" 是可选的。

  5. 为控件添加变量。

    使用 MFC ClassWizard (Ctrl+W) 添加成员变量,然后手动将 "CStatic" 更改为 "CBitmapSlider"。

  6. 插入代码以初始化控件。我推荐在 CDialog 中使用 OnInitDialog,在 CFormView 中使用 OnInitUpdate。在 "成员函数" 部分有关于方法的详细文档。

    示例代码

    BOOL CMyDialog::OnInitDialog()()
    {
        ...
    
        m_Slider.SetBitmapChannel( IDB_CHANNEL, NULL, TRUE );
        m_Slider.SetBitmapThumb( IDB_THUMB, IDB_THUMB_ACTIVE, TRUE );
        m_Slider.SetRange( -30, 200 );
        m_Slider.SetPos( -30 );
        m_Slider.SetMarginLeft( 8 );
        m_Slider.SetMarginRight( 8 );
    
        ...
    }
    

  7. 实现消息处理程序。

    插入以下几行来实现消息处理程序。

    • 在头文件中。
      afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
    • 在消息映射中。
      ON_MESSAGE(WM_BITMAPSLIDER_MOVING, OnMyMessage)
    • 在源文件中。
      LRESULT CMyDlg::OnMyMessage(WPARAM wParam, LPARAM lParam) {
      ...
      }

    "通知消息" 部分解释了消息。

成员函数

  • SetBitmapChannel - 加载通道的位图
    BOOL SetBitmapChannel(
        UINT nChannelID,
        UINT nActiveID = NULL,
        BOOL bTransparent = FALSE,
        COLORREF clrpTransColor = 0xFF000000,
        int iTransPixelX = 0,
        int iTransPixelY = 0
    );
    
    参数
    • nChannelID - 通道的位图资源的 ID 号。
    • nActiveID - 活动通道位图资源的 ID 号。
    • bTransparent - TRUE 以应用透明效果。
    • clrpTransColor - 要视为透明的 RGB 颜色。
    • iTransPixelX - 点的逻辑 x 坐标。其颜色将被视为透明。
    • iTransPixelY - 点的逻辑 y 坐标。

    返回值  如果函数成功,则返回 TRUE;否则返回 FALSE

  • SetBitmapThumb - 加载滑块的位图
    BOOL SetBitmapThumb(
        UINT nThumbID,
        UINT nActiveID = NULL,
        BOOL bTransparent = FALSE,
        COLORREF clrpTransColor = 0xFF000000,
        int iTransPixelX = 0,
        int iTransPixelY = 0
    );
    
    参数
    • nThumbID - 位图资源的 ID。
    • nActiveID - 位图资源的 ID。
    • bTransparent - TRUE 以应用透明效果。
    • clrpTransColor - 要视为透明的 RGB 颜色。
    • iTransPixelX - 点的逻辑 x 坐标。其颜色将被视为透明。
    • iTransPixelY - 点的逻辑 y 坐标。

    返回值: 如果函数成功,则返回 TRUE;否则返回 FALSE

  • SetRange - 设置滑块的范围(最小值和最大值)。
    BOOL SetRange(
        int nMin,
        int nMax,
        BOOL bRedraw = FALSE
    );
    
    参数:
    • nMin - 滑块的最小位置。
    • nMax - 滑块的最大位置。
    • bRedraw - 设置范围后 TRUE 以重绘。FALSE 仅更改范围。

  • SetVertical - 将滑块设置为垂直或水平。
    void SetVertical(
        BOOL bVertical = TRUE
    );
    
    参数:
    • bVertical - TRUE 设置为垂直。FALSE 设置为水平。

  • SetMargin - 设置控件的边距。
    void SetPos(
        int nLeft,
        int nTop,
        int nRight,
        int nBottom
    );
    
    参数:
    • nLeft - 指定新左边距的宽度(以像素为单位)。
    • nTop - 指定新上边距的高度(以像素为单位)。
    • nRight - 指定新右边距的宽度(以像素为单位)。
    • nBottom - 指定新下边距的高度(以像素为单位)。

  • SetPos - 设置滑块的当前位置。
    void SetPos(
        int nPos
    );
    
    参数:
    • nPos - 指定新的滑块位置。

  • SetPageSize - 设置控件的页面大小。
    void SetPageSize(
        int nSize
    );
    
    参数:
    • nSize - 控件的新页面大小。

    返回值: 前一个页面大小。

  • GetRange - 获取滑块的最大和最小位置。
    void GetRange(
        int& nMin,
        int& nMax
    );
    
    参数:
    • nMin - 接收最小位置的整数的引用。
    • nMax - 接收最大位置的整数的引用。

  • GetPos - 获取滑块的当前位置。
    int GetPos();
    
    返回值: 当前位置。

  • Enable - 启用或禁用控件。
    void Enable( BOOL bEnable );
    
    参数:
    • bEnable - TRUE 以启用控件。FALSE 以禁用控件。

  • DrawFocusRect - 指定是否绘制焦点矩形。
    DrawFocusRect(BOOL bDraw, BOOL bRedraw);
    参数:
    • bDraw - TRUE 绘制焦点矩形。FALSE 隐藏焦点矩形。
    • bRedraw - TRUE 重绘状态已更改。FALSE 仅更改状态。

通知消息

  • WM_BITMAPSLIDER_MOVING - 在拖动滑块时。
    WM_BITMAPSLIDER_MOVING
    
        WPARAM wParam
        LPARAM lParam;
    
    参数:
    • wParam - 控件的 ID。
    • lParam - 当前位置。

  • WM_BITMAPSLIDER_MOVED - 拖动完成时。
    WM_BITMAPSLIDER_MOVING
    
        WPARAM wParam
        LPARAM lParam;
    
    参数:
    • wParam - 控件的 ID。
    • lParam - 当前位置。

待办事项

  • 支持更改控件大小。

历史

  • v1.5 (2003 年 9 月 16 日)
    • 键盘支持。
    • 修复了一些错误。
  • v1.0 (2003 年 8 月 28 日)
    • 双缓冲。
    • 添加了透明效果。
    • 支持垂直选项。
  • v0.7 (2003 年 5 月 15 日)
    • 首次发布。

鸣谢

© . All rights reserved.