VC++中HTControl控件类的CHTSlider控制杆控件类简介

时间:2022-01-04 06:26:05

本文所述的是HTControl控件中的一个控制杆控件类文件代码,此类是完全独立的,没有任何基类。直接由WIN32 API实现。你可以在SDK,MFC,wxWidget等等方式下使用它。控制中包括一个垂直的控制杆控件,使用方式和水平的完全相同。窗体必须动态创建,具体代码段如下:

?
1
2
3
4
m_HTSliderR.Create(130, 500, 400, 14, m_hWnd, iChildId++, 0, 9, 14);
m_HTSliderR.SetBgPic(_T(".\\pic\\SliderBg.png"), NULL, 5, 5);
m_HTSliderR.SetThumbPic(_T(".\\pic\\SliderThumbN.png"));
m_HTSliderR.SetMouseOnThumbPic(_T(".\\pic\\SliderThumbH.png"));

使用方便简便,可认为是一个窗口就是一个C++对象,要想实现某功能直接呼叫接口即可,没有附加的代码。下面是控制杆类的主文件代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
/****************************************************************************
| Copyright (c) 2012,                            |
****************************************************************************/
#if !defined(__CHTSLIDER_H__)
#define __CHTSLIDER_H__
#include "CHTTip.h"
class CMySlider;
//#ifdef HTCONTROLAPI
//class __declspec(dllexport) CHTSlider
//#else
//class __declspec(dllimport) CHTSlider
//#endif
class AFX_CLASS_EXPORT CHTSlider
{
public:
 CHTSlider();
 ~CHTSlider();
/****************************************************************************
| 函数功能:创建控制杆控件                         |
| 输入参数:                                |
| x: 窗体位置x坐标(相对于父窗体)                      |
| y: 窗体位置y坐标(相对于父窗体)                      |
| iWidth: 窗体宽                             |
| iHeight: 窗体高                             |
| hParent: 父窗体句柄                           |
| iSliderId: 窗体ID                            |
| iThumbTop: 滑块顶端坐标                          |
| iThumbWidth:滑块宽                            |
| iThumbHeight: 滑块高                           |
| pRectChannel: channel矩形(channel占据的矩形) NULL表示不绘制channel    |
| 输出参数:无                               |
| 返回值: 成功返回窗体句柄 失败返回NULL                 |
| 说  明:                                |
****************************************************************************/
HWND Create(int x,
 int y,
 int iWidth,
 int iHeight,
 HWND hParent,
 int iSliderId,
 int iThumbTop,
 int iThumbWidth,
 int iThumbHeight,
 RECT* pRectChannel = NULL);
/****************************************************************************
| 函数功能:改变窗口位置大小                        |
| 输入参数:                                |
| x: 窗体位置x坐标(相对于父窗体)                      |
| y: 窗体位置y坐标(相对于父窗体)                      |
| iWidth: 窗体宽                             |
| bRepaint:是否重绘窗体                          |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:不支持高度的变化                        |
****************************************************************************/
 void MoveWindow(int x, int y, int iWidth, BOOL bRepaint = TRUE);
/****************************************************************************
| 函数功能:设置提示窗口类指针                       |
| 输入参数:                                |
| pclTip: 提示窗口类指针                          |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:                                |
****************************************************************************/
 void SetToolTip(CHTTip* pclTip);
/****************************************************************************
| 函数功能:获取窗口的句柄                         |
| 输入参数:无                               |
| 输出参数:无                               |
| 返回值: 窗体句柄                            |
| 说  明:                                |
****************************************************************************/
 HWND GetHandle();
/****************************************************************************
| 函数功能:获取父窗口的句柄                        |
| 输入参数:无                               |
| 输出参数:无                               |
| 返回值: 窗体句柄                            |
| 说  明:                                |
****************************************************************************/
 HWND GetParent();
/****************************************************************************
| 函数功能:使窗口无效                           |
| 输入参数:无                               |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:                                |
****************************************************************************/
void Disable();
/****************************************************************************
| 函数功能:使窗口有效                           |
| 输入参数:无                               |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:                                |
****************************************************************************/
void Enable();
/****************************************************************************
| 函数功能:设置窗体背景位图                        |
| 输入参数:                                |
| hBitmap:位图                               |
| iBgLeftLen: 图片左侧不可拉伸部分长度                   |
| iBgRightLen: 图片右侧不可拉伸部分长度                   |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:                                |
****************************************************************************/
void SetBgBitmap(HBITMAP hBitmap, int iBgLeftLen = 0, int iBgRightLen = 0);
/****************************************************************************
| 函数功能:设置Channel位图                         |
| 输入参数:                                |
| hBitmap:位图                               |
| iChannelLeftLen: 图片左侧不可拉伸部分长度                 |
| iChannelRightLen: 图片右侧不可拉伸部分长度                |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:                                |
****************************************************************************/
void SetChannelBitmap(HBITMAP hBitmap, int iChannelLeftLen = 0, int iChannelRightLen = 0);
/****************************************************************************
| 函数功能:设置滑块位图                          |
| 输入参数:                                |
| hBitmap:位图                               |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:                                |
****************************************************************************/
void SetThumbBitmap(HBITMAP hBitmap);
/****************************************************************************
| 函数功能:设置鼠标在滑块上的位图                     |
| 输入参数:                                |
| hBitmap:位图                               |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:                                |
****************************************************************************/
void SetMouseOnThumbBitmap(HBITMAP hBitmap);
/****************************************************************************
| 函数功能:设置逻辑范围,把逻辑值恢复到0,                 |
| 输入参数:                                |
| iRange :逻辑值的最大值                          |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:参数如果为0,此函数无作用                    |
****************************************************************************/
void SetRange(int iRange);
/****************************************************************************
| 函数功能:获取逻辑范围                          |
| 输入参数:无                               |
| 输出参数:无                               |
| 返回值: 范围                              |
| 说  明:                                |
****************************************************************************/
int GetRange();
/****************************************************************************
| 函数功能:设置当前逻辑值                         |
| 输入参数:                                |
| iValue:要设置的逻辑值                           |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:                                |
****************************************************************************/
void SetValue(int iValue);
/****************************************************************************
| 函数功能:获取当前的逻辑值                        |
| 输入参数:无                               |
| 输出参数:无                               |
| 返回值: 当前逻辑值                           |
| 说  明:                                |
****************************************************************************/
int GetValue();
/****************************************************************************
| 函数功能:获取鼠标所在位置的逻辑值                    |
| 输入参数:无                               |
| 输出参数:无                               |
| 返回值: 逻辑值                             |
| 说  明:                                |
****************************************************************************/
int GetTipValue();
/****************************************************************************
| 函数功能:设置按下方向键或滑轮滚动一次时的逻辑值变化大小         |
| 输入参数:                                |
| iLineSize:逻辑值变化大小                         |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:                                |
****************************************************************************/
void SetLineSize(int iLineSize);
/****************************************************************************
| 函数功能:获取按下方向键或滑轮滚动一次时的逻辑值变化大小         |
| 输入参数:                                |
| 输出参数:无                               |
| 返回值: 逻辑值变化大小                         |
| 说  明:                                |
****************************************************************************/
int GetLineSize();
/****************************************************************************
| 函数功能:设置窗体的不透明度                       |
| 输入参数:                                |
| iTransparency: 不透明度的百分比                     |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:                                |
****************************************************************************/
void SetTransparency(int iTransparency);
/****************************************************************************
| 函数功能:设置父窗体背景内存画布                     |
| 输入参数:                                |
| hParentBgMemDC: 父窗体背景内存画布                    |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:当父窗体背景在变化并且此窗体本身也有透明度时(包括窗体使用的位图 |
|      具有透明度或者窗体没有背景位图),需要调用此接口         |
****************************************************************************/
void SetParentBgMemDC(HDC hParentBgMemDC, int x = 0, int y = 0);
/****************************************************************************
| 函数功能:设置父窗体使用的背景位图                    |
| 输入参数:                                |
| hParentBgBitmap: 父窗体使用的背景位图                  |
| x, y 位图绘画起始点坐标                          |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:当父窗体背景使用静态位图并且此窗体本身也有透明度时(包括窗体使用 |
|      的位图具有透明度或者窗体没有背景位图),需要调用此接口      |
****************************************************************************/
void SetParentBgBitmap(HBITMAP hParentBgBitmap, int x = 0, int y = 0);
/****************************************************************************
| 函数功能:设置父窗体背景颜色                       |
| 输入参数:                                |
| CRParentBg: 父窗体背景颜色                        |
| 输出参数:无                               |
| 返回值: 无                               |
| 说  明:当父窗体背景使用固定颜色并且此窗体本身也有透明度时(包括窗体使用 |
|      的位图具有透明度或者窗体没有背景位图),需要调用此接口      |
****************************************************************************/
void SetParentBgColor(COLORREF CRParentBg = RGB(236, 233, 216));
private:
 CMySlider* m_pclSlider;
};
#endif //!__CHTSLIDER_H__

除经之外,CHTSlider控制杆类还具备灵活的界面表现、窗体任意透明度改变等,比如使用下面接口即可实现透明度的改变:

?
1
void SetTransparency(int iTransparency);

希望本文所述代码能对大家的VC++项目开发起到一定的帮助作用。