StrToRGB实现了输入一个十六进制的字符串,转换后输出为一个COLORREF的颜色值,如输入#ffaabbcc,则输出为RGB(170,187,204)。在用xml定义一些颜色值信息,又要和VC进行交互时,可以很方便地达到一致。
更多信息以及实现过程参见我的博客:
http://blog.csdn.net/iyranly/archive/2007/11/26/1902622.aspx
更多信息以及实现过程参见我的博客:
http://blog.csdn.net/iyranly/archive/2007/11/26/1902622.aspx
HtmlToRGB(
LPCTSTR pszBuff,
COLORREF* lpColor
)
{
CString strHtml(pszBuff); if(strHtml.GetLength() != 7 || strHtml.Left(1) != "#")
return FALSE; INT r, g, b; CString strTem;
strTem = "0x" + strHtml.Mid(1, 2);
strTem += "\n0x" + strHtml.Mid(3, 2);
strTem += "\n0x" + strHtml.Mid(5, 2); sscanf(strTem, "%I32x %I32x %I32x", &r, &g, &b);
return FALSE; *lpColor = RGB(r, g, b);
return TRUE;
}BOOL WINAPI
RGBToHtml(
COLORREF color,
LPTSTR lpString,
int nLenght
)
{
ASSERT(AfxIsValidString(lpString, nLenght));
if(lpString == NULL || nLenght < 8)
return FALSE; sprintf(lpString, "#%0.2x%0.2x%0.2x", GetRValue(color), GetGValue(color), GetBValue(color));
return TRUE;
}
{
int val[] = {0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,10,11,12,13,14,15};
str.MakeUpper();
str.TrimLeft("#");
BYTE bt[3];
ZeroMemory(bt, 3);
int j=0;
for(int i=0; i<6; i++,j++)
{
TCHAR ch = str.GetAt(i);
int it = nu[ch-'0'];
bt[j/2] |= it<<(((j+1)%2)*4);
} return RGB(bt[2, bt[1], bt[0]);
}
HtmlToRGB(LPCTSTR pszBuff, COLORREF* lpColor)
{
int color;
char szBuff[9] = {0}; if(lstrlen(pszBuff) != 7 || pszBuff[0] != '#')
return FALSE; strcat(szBuff, "0x");
strcat(szBuff, &pszBuff[1]);
StrToIntEx(szBuff, STIF_SUPPORT_HEX, &color);
*lpColor = color; return TRUE;
}