⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xnamedcolors.cpp

📁 读取XML信息
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		rc = m_aColorNames[index].color;
		if (rc & 0x80000000L)
			rc = GetSysColor(rc & 0x7FFFFFFFL);
	}

	return rc;
}

///////////////////////////////////////////////////////////////////////////////
void CXNamedColors::GetColorNameByIndex(int index, 
										LPTSTR lpszBuf, 
										DWORD nBufSize)
{
	_ASSERTE(lpszBuf);
	_ASSERTE(nBufSize > 0);
	_ASSERTE((index >= 0) && (index < m_nNamedColors));
	if (!lpszBuf || (nBufSize == 0))
		return;

	if ((index >= 0) && (index < m_nNamedColors))
	{
		memset(lpszBuf, 0, nBufSize*sizeof(TCHAR));
		_tcsncpy(lpszBuf, m_aColorNames[index].pszName, nBufSize-1);
	}
}

///////////////////////////////////////////////////////////////////////////////
void CXNamedColors::GetHex(LPTSTR lpszBuf, DWORD nBufSize)	// nBufSize in TCHARs
{
	_ASSERTE(lpszBuf);
	_ASSERTE(nBufSize > 0);
	if (!lpszBuf || (nBufSize == 0))
		return;

	memset(lpszBuf, 0, nBufSize*sizeof(TCHAR));

	BYTE r = GetRValue(GetRGB());
	BYTE g = GetGValue(GetRGB());
	BYTE b = GetBValue(GetRGB());

	_sntprintf(lpszBuf, nBufSize-1, _T("#%02X%02X%02X"), r, g, b);
}

///////////////////////////////////////////////////////////////////////////////
COLORREF CXNamedColors::GetRGB() 
{ 
	COLORREF rc = m_Color;
	if (IsSystemColor())
		rc = GetSysColor(m_Color & 0x7FFFFFFFL);
	return rc;
}

///////////////////////////////////////////////////////////////////////////////
void CXNamedColors::GetName(LPTSTR lpszBuf, DWORD nBufSize)	// nBufSize in TCHARs
{
	_ASSERTE(lpszBuf);
	_ASSERTE(nBufSize > 0);
	if (!lpszBuf || (nBufSize == 0))
		return;

	memset(lpszBuf, 0, nBufSize*sizeof(TCHAR));

	for (int i = 0; i < m_nNamedColors; i++)
	{
		if (m_Color == m_aColorNames[i].color)
		{
			_tcsncpy(lpszBuf, m_aColorNames[i].pszName, nBufSize-1);
			break;
		}
	}
}

///////////////////////////////////////////////////////////////////////////////
void CXNamedColors::GetRGBString(LPTSTR lpszBuf, DWORD nBufSize) // nBufSize in TCHARs
{
	_ASSERTE(lpszBuf);
	_ASSERTE(nBufSize > 0);
	if (!lpszBuf || (nBufSize == 0))
		return;

	memset(lpszBuf, 0, nBufSize*sizeof(TCHAR));

	_sntprintf(lpszBuf, nBufSize-1, _T("%u,%u,%u"), GetR(), GetG(), GetB());
}

///////////////////////////////////////////////////////////////////////////////
// #RRGGBB
void CXNamedColors::SetHex(LPCTSTR lpszHex)
{
	_ASSERTE(lpszHex);
	if (!lpszHex)
		return;

	COLORREF rgb = RGB(0,0,0);
	LPCTSTR cp = lpszHex;

	if ((*cp == _T('#')) && (_tcslen(lpszHex) == 7))
	{
		TCHAR s[3] = { _T('\0') };
		cp++;

		s[0] = *cp++;
		s[1] = *cp++;
		BYTE r = (BYTE)_tcstoul(s, NULL, 16);

		s[0] = *cp++;
		s[1] = *cp++;
		BYTE g = (BYTE)_tcstoul(s, NULL, 16);

		s[0] = *cp++;
		s[1] = *cp++;
		BYTE b = (BYTE)_tcstoul(s, NULL, 16);

		rgb = RGB(r,g,b);
	}
	m_Color = rgb;
}

///////////////////////////////////////////////////////////////////////////////
void CXNamedColors::SetName(LPCTSTR lpszColorName)
{
	_ASSERTE(lpszColorName);
	if (!lpszColorName)
		return;

	COLORREF rgb = RGB(0,0,0);

	for (int i = 0; i < m_nNamedColors; i++)
	{
		if (_tcsicmp(lpszColorName, m_aColorNames[i].pszName) == 0)
		{
			rgb = m_aColorNames[i].color;
			break;
		}
	}
	m_Color = rgb;
}

///////////////////////////////////////////////////////////////////////////////
// lpszColor:  "red" or "255,0,0" or "#0000FF"
void CXNamedColors::SetColorFromString(LPCTSTR lpszColor)
{
	_ASSERTE(lpszColor);
	if (!lpszColor)
		return;

	m_Color = RGB(0,0,0);		// initialize to black
	BYTE r = 0;
	BYTE g = 0;
	BYTE b = 0;
	TCHAR *cp = 0;

	if ((cp = (TCHAR*)_tcschr(lpszColor, _T(','))) != NULL)
	{
		// "255,0,0"
		r = (BYTE) _ttoi(lpszColor);
		cp++;
		g = (BYTE) _ttoi(cp);
		cp = _tcschr(cp, _T(','));
		if (cp)
		{
			cp++;
			b = (BYTE) _ttoi(cp);
		}
		m_Color = RGB(r,g,b);
	}
	else if ((cp = (TCHAR*)_tcschr(lpszColor, _T('#'))) != NULL)
	{
		// "#0000FF"
		if (_tcslen(lpszColor) == 7)
		{
			TCHAR s[3] = { _T('\0') };
			cp++;
			s[0] = *cp++;
			s[1] = *cp++;
			r = (BYTE)_tcstoul(s, NULL, 16);
			s[0] = *cp++;
			s[1] = *cp++;
			g = (BYTE)_tcstoul(s, NULL, 16);
			s[0] = *cp++;
			s[1] = *cp++;
			b = (BYTE)_tcstoul(s, NULL, 16);
			m_Color = RGB(r,g,b);
		}
	}
	else
	{
		// "red"
		for (int i = 0; i < m_nNamedColors; i++)
		{
			if (_tcsicmp(lpszColor, m_aColorNames[i].pszName) == 0)
			{
				m_Color = m_aColorNames[i].color;
				break;
			}
		}
	}
}

///////////////////////////////////////////////////////////////////////////////
void CXNamedColors::SetRGB(BYTE r, BYTE g, BYTE b) 
{ 
	m_Color = RGB(r, g, b);
}

///////////////////////////////////////////////////////////////////////////////
// nSysColorIndex is one of the values used with GetSysColor()
void CXNamedColors::SetSysColor(int nSysColorIndex)
{
	_ASSERTE((nSysColorIndex >= 0) && (nSysColorIndex <= COLOR_MENUBAR));

	if ((nSysColorIndex >= 0) && (nSysColorIndex <= COLOR_MENUBAR))
		m_Color = (DWORD) (nSysColorIndex | 0x80000000);
}

#ifdef _DEBUG
///////////////////////////////////////////////////////////////////////////////
//
// Dumps the color table in a form suitable for a HTML table, e.g.:
//
// <tr>
// <td style="background-color:#F0F8FF; color:black" align="center">AliceBlue<br>(#F0F8FF)</td>
// <td style="background-color:#FAEBD7; color:black" align="center">AntiqueWhite<br>(#FAEBD7)</td>
// <td style="background-color:#00FFFF; color:black" align="center">Aqua<br>(#00FFFF)</td>
// <td style="background-color:#7FFFD4; color:black" align="center">Aquamarine<br>(#7FFFD4)</td>
// <td style="background-color:#F0FFFF; color:black" align="center">Azure<br>(#F0FFFF)</td>
// </tr>
//
void CXNamedColors::Dump(LPCTSTR lpszFile)
{
	_ASSERTE(lpszFile);
	if (!lpszFile)
		return;

	FILE * f = _tfopen(lpszFile, _T("w"));
	if (f)
	{
		_ftprintf(f, _T("<html><body>\n"));
		_ftprintf(f, _T("<center><table bgcolor=\"gray\" border=1 cellspacing=1 cellpadding=3 summary=\"named colors\">"));

		TCHAR szBuf[100];
		for (int j = 0; j < m_nNamedColors; )
		{
			_ftprintf(f, _T("<tr>\n"));
			int cols = (j >= 140) ? 4 : 5;
			for (int k = 0; k < cols; k++)
			{
				if (m_aColorNames[j].color & 0x80000000)
				{
					DWORD index = m_aColorNames[j].color;
					index = index & 0x7FFFFFFF;
					SetSysColor(index);
				}
				else
				{
					SetRGB(m_aColorNames[j].color);
				}
				GetHex(szBuf, 99);
				TCHAR *text = _T("black");
				if (_tcscmp(szBuf, _T("#000000")) == 0)
					text = _T("white");
				_ftprintf(f, 
					_T("<td style=\"background-color:%s; color:%s\" align=\"center\">%s<br>(%s)</td>\n"),
					szBuf,
					text,
					CXNamedColors::m_aColorNames[j].pszName, 
					szBuf);
				j++;
				if (j >= CXNamedColors::m_nNamedColors)
					break;
			}
			_ftprintf(f, _T("</tr>\n\n"));
		}
		_ftprintf(f, _T("</table></center></body></html>\n"));
		fclose(f);
	}
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -