📄 xnamedcolors.cpp
字号:
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 + -