翻译来源:https://www.codeproject.com/Articles/2453/Skin-based-slider-control
<! - 下载链接 - >
<! - 文章图像 - ><! - 在这里添加其余的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); }