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

本文所述的是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++项目开发起到一定的帮助作用。

时间: 2014-08-10

C++编程中私有和保护以及公有的类成员访问控制

private 语法 private: [member-list] private base-class 备注 当位于类成员列表之前时,private 关键字指定这些成员仅可从成员函数和该类的友元中进行访问.这适用于声明到下一个访问指示符或类的末尾的所有成员. 当位于基类的名称之前时,private 关键字指定基类的公共成员和受保护成员为派生类的私有成员. 类中成员的默认访问是私有的.结构或联合中成员的默认访问是公共的. 基类的默认访问对于类是私有的,而对于结构是公共的. 联合不能具有基类. 例

VC++中HTControl控制类使用之CHTDlgBase对话框基类实例

本文所述为VC++界面编程的一个MFC例子,基于HTControl控件类的CHTDlgBase对话框基类主文件代码.该程序可完成动态创建框架窗体,窗体外观(客户区与非客户区),调整窗体大小,无效子窗口的控制等功能. 具体实现代码如下: /**************************************************************************** | Copyright (c) 2012, | ******************************

C++ 类访问控制的条件总结

C++ 类访问控制的条件总结 最近在使用C++创建类的时候,忽然发现自己对于类访问控制 public,protected,private 的作用没有理解透彻,后来就查了些资料,这里以作记录. 访问控制 C++类的重要属性就是封装和继承.因此,最关键的问题就是权限 的问题,public,protected,private 控制的就是访问权限. public protected private 类成员是否可以访问 Yes Yes Yes 友元函数是否可以访问 Yes Yes Yes 子类是否可以访问

ruby 学习笔记(2) 类的基本使用

ruby语言跟c#的一些重要差别在于: 1.ruby是动态语言,c#是静态语言--即对象在new出来以后,ruby还可以动态给对象实例添加一些属性或方法(javascript也是如此) 2.ruby中刻意弱化了变量类型这个概念,默认情况下变量/方法都不需要声明具体(返回)类型,但其实在ruby内部,会自动根据变量的值分配类型.(可以通过 "puts 变量.class"查看) 3.ruby相对c#来讲,可能有些雷的地方在于:父类中的private成员,居然是可以在子类中使用的! ...其

基于JavaScript实现前端数据多条件筛选功能

有时候也会需要在前端进行数据筛选,增强交互体验.当数据可用的筛选条件较多时,把逻辑写死会给后期维护带来很大麻烦.下面是我自己写的一个简单的筛选器,筛选条件可以根据数据包含的字段动态设置. 仿照京东的筛选条件,这里就取价格区间和品牌作为测试. 代码 代码中主要使用js的过滤器Array.prototype.filter,该方法会对数组元素进行遍历检查,返回一个符合检查条件的新数组,不会改变原数组. // filter() var foo = [0,1,2,3,4,5,6,7,8,9]; var f

ReentrantLock源码详解--条件锁

问题 (1)条件锁是什么? (2)条件锁适用于什么场景? (3)条件锁的await()是在其它线程signal()的时候唤醒的吗? 简介 条件锁,是指在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件的出现才可以继续处理时使用的一种锁. 比如,在阻塞队列中,当队列中没有元素的时候是无法弹出一个元素的,这时候就需要阻塞在条件notEmpty上,等待其它线程往里面放入一个元素后,唤醒这个条件notEmpty,当前线程才可以继续去做"弹出一个元素"的行为. 注意,这里的条件,必须是

spring boot中的条件装配bean的实现

条件装配 从Spring Framework 3.1开始,允许在Bean装配时增加前置条件判断. 啥是条件装配 在bean装配前的条件判断.比如@Profile(是在spring3.1中引入),@Contditional(spring4.0中引入) 实现方式:注解方式,编程方式. 假设我们现在有一个多数据求和计算的小需求,定义两种方式Java7和Java8,然后使用条件装配的方式分别装配不同的bean. 首先我们定义一个接口 public interface CalculateService {

使用简单工厂模式来进行Python的设计模式编程

计模式的目的是让代码易维护.易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的. 简单工厂模式又叫静态工厂方法模式,工厂模式家族中最简单的一种模式.这个模式的基本工作方式: 通过一个工厂来决定创建哪种具体的产品实例. 下面是一个简单的工厂实例: def create_animal(name): if name == 'dog': return Dog() elif name == 'cat': return Cat() animal = create_animal('dog

用Python从零实现贝叶斯分类器的机器学习的教程

朴素贝叶斯算法简单高效,在处理分类问题上,是应该首先考虑的方法之一. 通过本教程,你将学到朴素贝叶斯算法的原理和Python版本的逐步实现. 更新:查看后续的关于朴素贝叶斯使用技巧的文章"Better Naive Bayes: 12 Tips To Get The Most From The Naive Bayes Algorithm" 朴素贝叶斯分类器,Matt Buck保留部分版权 关于朴素贝叶斯 朴素贝叶斯算法是一个直观的方法,使用每个属性归属于某个类的概率来做预测.你可以使用这

单例模式垃圾回收_动力节点Java学院整理

讨论命题:当一个单例的对象长久不用时,会不会被jvm的垃圾收集机制回收. 首先说一下为什么会产生这一疑问,笔者本人再此之前从来没有考虑过垃圾回收对单例模式的影响,直到去年读了一本书,<设计模式之禅>秦小波著.在书中提到在j2ee应用中,jvm垃圾回收机制会把长久不用的单例类对象当作垃圾,并在cpu空闲的时候对其进行回收.之前读过的几本设计模式的书,包括<Java与模式>,书中都没有提到jvm垃圾回收机制对单例的影响.并且在工作过程中,也没有过单例对象被回收的经历,加上工作中很多前辈

java设计模式之简单工厂模式简述

简单工厂模式的概念 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 简单工厂模式的UML图 简单工厂模式代码 学习简单工厂模式的时候我用的是一个与人类有相关的例子.人类在世界分为男人和女人,首先定义一个Human产品的抽象接口 /** * This is factory patter package */ package com.roc.factory; /** *

C# 设计模式系列教程-简单工厂模式

1. 概述: 将一个具体类的实例化交给一个静态工厂方法来执行,它不属于GOF的23种设计模式,但现实中却经常会用到 2. 模式中的角色 2.1 工厂类(Simple Factory): 只包含了创建具体类的静态方法. 2.2 抽象产品(Product):定义简单工厂中要返回的产品. 2.3 具体产品(ConcreteProduct):具体产品. 3. 模式解读 3.1 简单工厂模式的一般化类图 3.2 简单工厂模式的代码实现 /// <summary> /// 简单工厂类,用sealed修饰,