本文所述的是HTControl控件中的一个控制杆控件类文件代码,此类是完全独立的,没有任何基类。直接由WIN32 API实现。你可以在SDK,MFC,wxWidget等等方式下使用它。控制中包括一个垂直的控制杆控件,使用方式和水平的完全相同。窗体必须动态创建,具体代码段如下:
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++对象,要想实现某功能直接呼叫接口即可,没有附加的代码。下面是控制杆类的主文件代码:
/****************************************************************************
| 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控制杆类还具备灵活的界面表现、窗体任意透明度改变等,比如使用下面接口即可实现透明度的改变:
void SetTransparency(int iTransparency);
希望本文所述代码能对大家的VC++项目开发起到一定的帮助作用。