StrToRGB实现了输入一个十六进制的字符串,转换后输出为一个COLORREF的颜色值,如输入#ffaabbcc,则输出为RGB(170,187,204)。在用xml定义一些颜色值信息,又要和VC进行交互时,可以很方便地达到一致。
更多信息以及实现过程参见我的博客:
http://blog.csdn.net/iyranly/archive/2007/11/26/1902622.aspx

解决方案 »

  1.   

    由于在blog中我没有找到上传附件的功能,因此在此发帖并上传源代码,与blog联系起来。
      

  2.   

    由于时间关系,我没有对字符串进行像css上面的判断,有兴趣的朋友可以自己扩展!
      

  3.   

    BOOL WINAPI
    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;
    }
      

  4.   

    COLORREF str2rgb(CString& str)
    {
    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]);
    }
      

  5.   

    我写个更简单的方法BOOL WINAPI
    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;
    }
      

  6.   

    实际上#ffffff == 0xffffff