CColor类封装
CColor类封装
- Color.h
#pragma once #include <sstream>
#include <string>
using namespace std; class CColor
{
public:
CColor(void);
~CColor(void); CColor(const CColor& color);
CColor& operator=(const CColor& color); CColor(float, float, float);
CColor(int, int, int);
CColor(COLORREF clr); // 以两个逗号分隔的字符串
CColor(const string& strColor); public:
COLORREF GetRGB();
DWORD GetARGB();
float GetR();
float GetG();
float GetB();
void SetStrValue(const string& strColor);
string GetStrValue();
string Trans2Txt(); private:
void ParseStrColor(const string& strColor); private:
byte m_tAlpha;
float m_fRed;
float m_fGreen;
float m_fBlue; };
2. Color.cpp
#include "StdAfx.h" #include "Color.h" #include "Utils.h" CColor::CColor(void) : m_tAlpha(255), m_fRed(.0f), m_fGreen(.0f), m_fBlue(.0f)
{
} CColor::~CColor(void)
{
} CColor::CColor( const CColor& color )
{
*this = color;
} CColor& CColor::operator=(const CColor& color )
{
if (this == &color)
{
return *this;
} m_tAlpha = color.m_tAlpha;
m_fRed = color.m_fRed;
m_fGreen = color.m_fGreen;
m_fBlue = color.m_fBlue; return *this;
} CColor::CColor( float fRed, float fGreen, float fBlue)
{
m_tAlpha = 255;
m_fRed = fRed;
m_fGreen = fGreen;
m_fBlue = fBlue;
} CColor::CColor( int nRed, int nGreen, int nBlue)
{
m_tAlpha = 255;
m_fRed = (float)nRed / 255;
m_fGreen = (float)nGreen / 255;
m_fBlue = (float)nBlue / 255;
} CColor::CColor( COLORREF clr )
{
byte* p = (byte*)&clr;
int nRed = *p++;
int nGreen = *p++;
int nBlue = *p++; m_tAlpha = 255;
m_fRed = (float)nRed / 255;
m_fGreen = (float)nGreen / 255;
m_fBlue = (float)nBlue / 255;
} COLORREF CColor::GetRGB()
{
COLORREF colorrrefRGB;
colorrrefRGB = RGB(byte(m_fRed * 255), byte(m_fGreen * 255), byte(m_fBlue * 255));
return colorrrefRGB;
} DWORD CColor::GetARGB()
{
byte tRed = byte(m_fRed * 255);
byte tGreen = byte(m_fGreen * 255);
byte tBlue = byte(m_fBlue * 255); return (((DWORD)(tBlue) << 0) |
((DWORD)(tGreen) << 8) |
((DWORD)(tRed) << 16) |
((DWORD)(m_tAlpha) << 24));
} float CColor::GetR()
{
return m_fRed;
} float CColor::GetG()
{
return m_fGreen;
} float CColor::GetB()
{
return m_fBlue;
} /**
* @brief 解析颜色字符串
*
* 根据指定字符串解析出颜色的三个分量
* 字符串以逗号或空格分割,如"strR,strG,strB" 其中strR,strG和strB都在0.0到1.0间取值
* @param[in] const string& strColor
* @return void
*/
void CColor::SetStrValue( const string& strColor )
{
ParseStrColor(strColor);
} std::string CColor::GetStrValue()
{
stringstream ss;
ss << Float2Str(m_fRed) << ", ";
ss << Float2Str(m_fGreen) << ", ";
ss << Float2Str(m_fBlue); return ss.str();
} std::string CColor::Trans2Txt()
{
return GetStrValue();
} void CColor::ParseStrColor( const string& strColor )
{
string strTmpValue = strColor;
TrimLineSpace(strTmpValue); string strSplitSymbol = ",";
size_t nSplitPos = strTmpValue.find_first_of(strSplitSymbol); if (nSplitPos == string::npos)
{
strSplitSymbol = " ";
} size_t nFirstPos = strTmpValue.find_first_of(strSplitSymbol); if (nFirstPos != string::npos)
{
string strValue = strTmpValue.substr(0, nFirstPos);
m_fRed = Str2Float(strValue); strTmpValue = strTmpValue.substr(nFirstPos + 1, string::npos);
TrimLineSpace(strTmpValue); nFirstPos = strTmpValue.find_first_of(strSplitSymbol); if (nFirstPos != string::npos)
{
strValue = strTmpValue.substr(0, nFirstPos);
m_fGreen = Str2Float(strValue);
} strTmpValue = strTmpValue.substr(nFirstPos + 1, string::npos);
TrimLineSpace(strTmpValue); if (strTmpValue != "")
{
m_fBlue = Str2Float(strTmpValue);
}
} m_tAlpha = 255;
}
CColor类封装的更多相关文章
- salesforce 零基础学习(四十八)自定义列表分页之Pagination基类封装 ※※※
我们知道,salesforce中系统标准列表页面提供了相应的分页功能,如果要使用其分页功能,可以访问http://www.cnblogs.com/zero-zyq/p/5343287.html查看相关 ...
- Redis操作Set工具类封装,Java Redis Set命令封装
Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...
- Redis操作List工具类封装,Java Redis List命令封装
Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...
- Redis操作Hash工具类封装,Redis工具类封装
Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...
- Redis操作字符串工具类封装,Redis工具类封装
Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...
- java中基于TaskEngine类封装实现定时任务
主要包括如下几个类: 文章标题:java中基于TaskEngine类封装实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10950529 ...
- C++基础——类封装简单示例
一.前言 在IC前端设计/验证领域,只会HDL远远不够.目前大多数项目使用已开发好的系统架构和IP Core,因此设计部分的工作量慢慢向系统集成和验证方向转移.而在集成和验证过程中,往往以各种脚本和面 ...
- Timber(对Log类封装的一个工具)
Timber(对Log类封装的一个工具) https://blog.csdn.net/hzl9966/article/details/51314137 https://www.jianshu.com/ ...
- Java中使用自定义类封装数组,添加类方法实现数据操作
1.具体见注释 2.后续或有更新 public class MyArray { private long[] array; private int cnt; // 自定义数组类的元素个数 /** 使用 ...
随机推荐
- InnoDB锁
共享锁和排它锁 InnoDB实现了标准的行级锁,包括两种类型:共享锁(S)和排它锁(X) 一个共享锁(S)允许事务持有这种锁来读取一行 一个排它锁(X)允许事务持有这种锁来修改或删除一行 如果事务T1 ...
- I/O模型详细解析
内核空间和用户空间:由于操作系统都包括内核空间和用户空间(或者说内核态和用户态),内核空间主要存放的是内核代码和数据,是供系统进程使用的空间.而用户空间主要存放的是用户代码和数据,是供用户进程使用的空 ...
- web前端教程:CSS 布局十八般武艺都在这里了
CSS布局 布局是CSS中一个重要部分,本文总结了CSS布局中的常用技巧,包括常用的水平居中.垂直居中方法,以及单列布局.多列布局的多种实现方式(包括传统的盒模型布局和比较新的flex布局实现), ...
- HashSet源码阅读
HashSet的实现基于HashMap 看几个简单的初始化方法 public HashSet() { map = new HashMap<>(); } public HashSet(Col ...
- [整理]vimtutor章节小结
第一讲小结 1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键. h (左移) j (下行) k (上行) l (右移) 2. 欲进入 Vim 编辑器(从命令行提示符),请输入: ...
- 名片管理系统v1.1(main)
# version: 1.1# author: Mark import cords_tools while True: # 显示界面 cords_tools.show_cords() cords ...
- Nginx日常维护操作(3)
一.简明nginx常用命令 1. 启动 Nginx /sbin/nginx service nginx start 2. 停止 Nginx /sbin/nginx -s stop /sbi ...
- web安全与防御
xss攻击(跨站脚本) 是网站应用程序的安全泄露攻击,是代码注入的一种.它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响. 攻击原理 其特点是不对服务器端造成任何伤害,而是通过一些正 ...
- backbone 要点知识整理
1.backbone 是个mvc的库,官方文档说它是个库,而不是个框架.库和框架的区别就是,库只是个工具,方便你的项目应用,不会改变你的项目结构,而框架会有一套自己的机制,项目需要遵循框架的设计来实现 ...
- CTF---Web入门第十四题 忘记密码了
忘记密码了分值:20 来源: Justatest 难度:中 参与人数:7706人 Get Flag:2232人 答题人数:2386人 解题通过率:94% 找回密码 格式:SimCTF{ } 解题链接: ...