设计一个兼容C++ CLI中的System::Drawing::Color 和System::Drawing::Font 类

应用例子:

 

 

 _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_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值