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

本文介绍了一种基于皮肤的滑块控件实现方案,该方案允许开发者自定义背景和刻度,支持设置自定义光标,适用于美化界面设计。

翻译来源:https://www.codeproject.com/Articles/2453/Skin-based-slider-control

作者:Ashok Jaiswal


<! - 下载链接 - >

<! - 文章图像 - >

样品图像 -  skinslider.gif

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

介绍

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

如何使用它?

它相当简单的使用CZipSliderClt该类。只需将文件ZipSliderCtl.hZipSliderCtl.cppZipBitmap.hZipBitmap.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);
}

`ui->horizontalSlider_2->setDisabled` 是 Qt 中用于禁用 `QSlider` 控件(这里是水平滑动条 `horizontalSlider_2`)的方法。以下是关于它的使用方法和效果的详细说明: ### 使用方法 `setDisabled` 是 `QWidget` 的一个成员函数,`QSlider` 继承自 `QWidget`,因此可以使用该方法。该方法接受一个布尔值作为参数,`true` 表示禁用该控件,`false` 表示启用该控件。 下面是一个简单的示例代码,展示了如何使用 `setDisabled` 方法: ```cpp #include <QMainWindow> #include "ui_mainwindow.h" class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // 禁用 horizontalSlider_2 ui->horizontalSlider_2->setDisabled(true); // 可以在需要的时候启用它 // ui->horizontalSlider_2->setDisabled(false); } ~MainWindow() { delete ui; } private: Ui::MainWindow *ui; }; ``` 在上述代码中,在 `MainWindow` 的构造函数中调用 `ui->horizontalSlider_2->setDisabled(true)` 禁用了 `horizontalSlider_2` 滑动条。如果需要启用该滑动条,可以调用 `ui->horizontalSlider_2->setDisabled(false)`。 ### 效果 当调用 `ui->horizontalSlider_2->setDisabled(true)` 禁用滑动条后,会产生以下效果: - **视觉效果**:滑动条通常会变灰,以视觉上提示用户该控件当前不可用。 - **交互效果**:用户无法通过鼠标拖动滑块、点击滑块或使用键盘上的方向键来改变滑动条的值。也就是说,滑动条对用户的输入不再做出响应。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值