您的位置:首页 > 其它

有皮肤的滑块控件CSliderCtrl->CZipSliderCtl 类

2017-06-20 18:52 453 查看
翻译来源:https://www.codeproject.com/Articles/2453/Skin-based-slider-control

作者:Ashok Jaiswal

<! - 下载链接 - >

下载源文件 - 2 Kb

下载演示项目 - 23 Kb
<! - 文章图像 - >



<! - 在这里添加其余的HTML - >


介绍

这是一个寻找基于皮肤的滑块控件的开发人员的解决方案。它与Nic Wilson 的文章“ 透明滑块控件”的不同之处在于它允许您对滑块控件的背景和刻度进行整理,并允许您在滑块控件上设置自定义光标。
滑块控件的主要类别是
CZipSliderCtl
使用另一个位图类
CZipBitmap
来绘制控件上的正常和透明图像。这是非常容易使用和看起来不错(如果你有美丽的图像),所以去吧。按照以下说明在应用程序中使用它。


如何使用它?

它相当简单的使用
CZipSliderClt
该类。只需将文件ZipSliderCtl.h,ZipSliderCtl.cpp,ZipBitmap.h,ZipBitmap.cpp添加到项目中,将滑块控件添加到对话框并更改控件的成员变量。修改以下代码

隐藏   复制代码
CSliderCtl	m_sliderCtl;


看起来像这样:

隐藏   复制代码
CZipSliderCtl	m_sliderCtl;


您将需要在应用程序的dlg头文件的顶部添加以下代码。

隐藏   复制代码
#include "ZipSliderCtl.h"


恭喜您已经成功创建了滑块控件的对象,现在是时候控制了。在
OnInitDialog
函数底部添加以下代码

隐藏   复制代码
m_sliderCtl.SetSkin(IDB_SEEKBAR_BACK,IDB_SEEKBAR_TICK,IDC_CURSOR_SEEK);
m_sliderCtl.SetRange(0,15000);


所以你已经弄清了你的控制,它已经可以使用了。编译并运行,看看它的外观。所有最好的..享受!


幕后

CZipSliderCtl
班是基于子类的相当简单的概念。我已经派生了这个类,
CSliderCtl
并且覆盖了以下功能

隐藏   复制代码
//{{AFX_MSG(CZipSliderCtl)
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnPaint();
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
//}}AFX_MSG


我已经使用该类
CZipBitmap
在对话框中绘制正常和透明的图像。如果使用此类绘制任何透明图像,则会使所有部分的let-top像素颜色透明。皮肤控制的魔力总是包含在
OnPaint
功能中。所以看下面的魔法代码行

隐藏   复制代码
{
CPaintDC dc(this); // device context for painting

int iMax,iMin,iTickWidth=10,iMarginWidth=10;
GetRange(iMin,iMax);
RECT rcBack,rcTick;
GetClientRect(&rcBack);
rcTick = rcBack;
TRACE("%d\n",GetPos());
rcTick.left = ((rcBack.right-iMarginWidth)*(GetPos()))/((iMax - iMin)+iMarginWidth/2);
rcTick.right = rcTick.left + iTickWidth;

m_bmpBack->Draw(dc,0,0);
m_bmTrans->DrawTrans(dc,rcTick.left, -2);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: