应用例子:
_Color.h
/*******************************************************************************************
文件名 : color.h
作者 : 李锋
功能 : 颜色类
创建时间 : 2022年12月14日
最后一次修改时间 : 2022年12月14日
********************************************************************************************/
#ifndef __COLOR_H_
#define __COLOR_H_
#include "_Object.h"
_LF_BEGIN_
#ifdef _CLR_
using namespace System::Drawing;
#endif
class _Color : public _Object
{
public:
_byte _a = 255;
_byte _r = 0;
_byte _g = 0;
_byte _b = 0;
public:
#ifdef _CLR_
operator System::Drawing::Color() const;
_Color(Color c);
_Color operator = (Color c);
#endif
public:
_Color();
_Color(int r, int g, int b);
_Color(const _Color& rhs);
/// <summary>
/// 把对象保存在内存中,不要去修改,会影响 _NTreeNote 的打包。
/// </summary>
/// <returns></returns>
/// 创建时间:2023-01-04 最后一次修改时间:2023-01-04
_ByteArray& PackageMemory(_ByteArray& baPackageMem) const override;
/// <summary>
/// 从内存中读出对象,不要去修改,会影响 _NTreeNote 的打包。
/// </summary>
/// <param name="baPackage"></param>
/// <returns></returns>
/// 创建时间:2023-01-04 最后一次修改时间:2023-03-12
void SplitFromMemory(const _byte* pPackageMem, const _uint nStart = 0) override;
public:
static _Color Random();
static _Color RedRandom();
static _Color GreenRandom();
static _Color BlueRandom();
static _Color YellowRandom();
public:
const static _Color Red;
const static _Color Green;
const static _Color White;
const static _Color Black;
const static _Color Yellow;
const static _Color Blue;
const static _Color 紫色;
const static _Color 浅粉红;
const static _Color 粉红;
const static _Color 嫩绿色;
const static _Color 深绿色;
const static _Color 黄绿色;
const static _Color 暗黄绿色;
const static _Color 字符串;
const static _Color 自定义类;
const static _Color 自定义函数;
const static _Color 宏定义值;
const static _Color 函数;
const static _Color 关键字;
};
_LF_END_
#endif
_Color.cpp
#include "_Color.h"
#include "global_c_all.h"
_LF_BEGIN_
//_Color::aa = _Color(3, 4, 5);
const _Color _Color::Red(255, 0, 0); //红色
const _Color _Color::Black(0, 0, 0); //黑色
const _Color _Color::White(255, 255, 255); //白色
const _Color _Color::Green(0, 255, 0); //绿色
const _Color _Color::Yellow(255, 255, 0); //黄色
const _Color _Color::Blue(0, 0, 255); //蓝色
const _Color _Color::紫色(128, 0, 128); //紫色
const _Color _Color::浅粉红(255, 182, 193); //浅粉红
const _Color _Color::粉红(255, 192, 203); //"粉红"
const _Color _Color::嫩绿色(60, 255, 113); //深绿色
const _Color _Color::深绿色(0, 100, 0); //深绿色
const _Color _Color::黄绿色(127, 255, 0); //黄绿色
const _Color _Color::暗黄绿色(154, 203, 0); // #9ACB00
const _Color _Color::字符串(200, 200, 0);
const _Color _Color::自定义类(150, 69, 0); //自定义类(150, 69, 0);
const _Color _Color::自定义函数(150, 69, 69);
const _Color _Color::宏定义值(244, 194, 194);
const _Color _Color::函数(154, 203, 0);
const _Color _Color::关键字(0, 0, 255); //蓝色
#ifdef _CLR_
_Color::operator System::Drawing::Color() const
{
return Color::FromArgb(_a, _r, _g, _b);
}
_Color _Color::operator=(Color c)
{
_a = c.A; _r = c.R; _g = c.G; _b = c.B;
return *this;
}
_Color::_Color(Color c)
{
_a = c.A; _r = c.R; _g = c.G; _b = c.B;
}
#endif
_Color::_Color()
{
}
_Color::_Color(int r, int g, int b)
{
_r = r, _g = g, _b = b;
}
_Color::_Color(const _Color& rhs)
{
_r = rhs._r; _g = rhs._g; _b = rhs._b;
}
_ByteArray& _Color::PackageMemory(_ByteArray& baPackageMem) const
{
//Font^ f = gcnew Font(_t("宋体"),12, FontStyle::Bold | FontStyle::Regular);
baPackageMem.ClearData();
baPackageMem.SetBuffer(10);
baPackageMem.AddByte(_a);
baPackageMem.AddByte(_r);
baPackageMem.AddByte(_g);
baPackageMem.AddByte(_b);
return baPackageMem;
}
/// <summary>
/// 从内存中读出对象,不要去修改,会影响 _NTreeNote 的打包。
/// </summary>
/// <param name="baPackage"></param>
/// <returns></returns>
/// 创建时间:2023-01-04 最后一次修改时间:2023-03-12
void _Color::SplitFromMemory(const _byte* pPackageMem, const _uint nStart)
{
_byte* pData = (_byte*)pPackageMem + nStart;
_a = *pData;
_r = *(pData + 1);
_g = *(pData + 2);
_b = *(pData + 3);
}
_Color _Color::Random()
{
return _Color(_Math::Random(0, 255), _Math::Random(0, 255), _Math::Random(0, 255));
}
_Color _Color::RedRandom()
{
return _Color(255, _Math::Random(0, 255), _Math::Random(0, 255));
}
_Color _Color::GreenRandom()
{
return _Color(_Math::Random(0, 255), 255 , _Math::Random(0, 255));
}
_Color _Color::BlueRandom()
{
return _Color(_Math::Random(0, 255), _Math::Random(0, 255), 255);
}
_Color _Color::YellowRandom()
{
return _Color(_Math::Random(120, 180), 255, 0);
}
_LF_END_
_Font.h
/*******************************************************************************************
文件名 : _Font.h
作者 : 李锋
功能 : 线性表
创建时间 : 2023年01月01日
最后一次修改时间 : 2023年01月01日
********************************************************************************************/
#ifndef __FONT_H_
#define __FONT_H_
#include "_Object.h"
#include "_StrA.h"
#include "_StrW.h"
#ifdef _CLR_
using namespace System::Drawing;
#endif
_LF_BEGIN_
class _Font : public _Object
{
public:
_string FamilyName;
float Size;
int Style;
public:
const _string& GetFamilyName()const;
public:
_Font();
_Font(const _string& familyName, const float& emSize);
_Font(const _string& familyName, const float& emSize, int Style);
#ifdef _CLR_
operator Font ^ ()const;
_Font(Font^ f);
#endif
/// <summary>
/// 把对象保存在内存中,不要去修改,会影响 _NTreeNote 的打包。
/// </summary>
/// <returns></returns>
/// 创建时间:2023-01-04 最后一次修改时间:2023-01-04
_ByteArray& PackageMemory(_ByteArray& baPackageMem) const override;
/// <summary>
/// 从内存中读出对象,不要去修改,会影响 _NTreeNote 的打包。
/// </summary>
/// <param name="baPackage"></param>
/// <returns></returns>
/// 创建时间:2023-01-04 最后一次修改时间:2023-03-12
void SplitFromMemory(const _byte* pPackageMem, const _uint nStart = 0) override;
};
_LF_END_
#endif
_Font.cpp
#include "_Font.h"
#include "global_c_all.h"
_LF_BEGIN_
_Font::_Font()
{
FamilyName = _t("微软雅黑");
Size = 12;
Style = 0; //System::Drawing::FontStyle Regular = 0
}
const _string& _Font::GetFamilyName() const
{
return FamilyName;
}
_Font::_Font(const _string& familyName, const float& emSize)
{
FamilyName = familyName;
Size = emSize;
Style = 0;
}
_Font::_Font(const _string& familyName, const float& emSize, int iStyle)
{
FamilyName = familyName;
Size = emSize;
Style = iStyle;
}
#ifdef _CLR_
_Font::operator Font ^ () const
{
return gcnew Font(FamilyName, Size, (FontStyle)Style);
}
_Font::_Font(Font^ f)
{
Size = f->Size;
FamilyName = f->Name;
Style = (int)f->Style;
}
#endif
/// <summary>
/// 把对象保存在内存中,不要去修改,会影响 _NTreeNote 的打包。
/// </summary>
/// <returns></returns>
/// 创建时间:2023-01-04 最后一次修改时间:2023-01-04
_ByteArray& _Font::PackageMemory(_ByteArray& baPackageMem) const
{
//Font^ f = gcnew Font(_t("宋体"),12, FontStyle::Bold | FontStyle::Regular);
baPackageMem.ClearData();
baPackageMem.SetBuffer(100);
int n = FamilyName.DataMemoryLength;
baPackageMem.AddInt(n);
baPackageMem.Add((_byte*)FamilyName.Data, n);
baPackageMem.AddFloat(Size);
baPackageMem.Add(Style);
return baPackageMem;
}
/// <summary>
/// 从内存中读出对象,不要去修改,会影响 _NTreeNote 的打包。
/// </summary>
/// <param name="baPackage"></param>
/// <returns></returns>
/// 创建时间:2023-01-04 最后一次修改时间:2023-03-14
void _Font::SplitFromMemory(const _byte* pPackageMem, const _uint nStart)
{
_byte* pData = (_byte*)(pPackageMem + nStart);
int n = *((int*)pData);
pData += sizeof(int);
FamilyName = _string::CopyFrom((_char*)pData, n / sizeof(_char));
pData += n;
Size = *((float*)pData);
/*
//由于磁盘存在着以前Size = 0 的数据
if (Size <= 0 || Size > 72) //校正字符大小
{
Size = 10;
}
*/
pData += sizeof(float);
Style = *((int*)pData);
}
_LF_END_