bool SColorParser::ParseValue(const SStringW & strValue, COLORREF & value) { int r = 255, g = 255, b = 255, a = 255; int nSeg=0; SStringW strValueL = strValue; strValueL.MakeLower(); if(strValueL.Left(1)==L"#") { nSeg = swscanf(strValueL,L"#%02x%02x%02x%02x",&r,&g,&b,&a); }else if(strValueL.Left(4).CompareNoCase(L"rgba")==0) { nSeg = swscanf(strValueL,L"rgba(%d,%d,%d,%d)",&r,&g,&b,&a); }else if(strValueL.Left(3).CompareNoCase(L"rgb")==0) { nSeg = swscanf(strValueL,L"rgb(%d,%d,%d)",&r,&g,&b); } if(nSeg!=3 && nSeg != 4) { SASSERT_FMT(FALSE,TEXT("ParseColor Failed with [%s]"),S_CW2T(strValue)); return false; }else { value = RGBA(r,g,b,a); return true; } }
bool SPropertyItemColor::ParseValue(const SStringT & strValue, COLORREF & value) { int r,g,b,a=255; int nSeg=0; SStringW strValueL = strValue; strValueL.MakeLower(); if(strValueL.Left(1)==L"#") { nSeg = swscanf(strValueL,L"#%02x%02x%02x%02x",&r,&g,&b,&a); }else if(strValueL.Left(4).CompareNoCase(L"rgba")==0) { nSeg = swscanf(strValueL,L"rgba(%d,%d,%d,%d)",&r,&g,&b,&a); }else if(strValueL.Left(3).CompareNoCase(L"rgb")==0) { nSeg = swscanf(strValueL,L"rgb(%d,%d,%d)",&r,&g,&b); } if(nSeg!=3 && nSeg != 4) { //SASSERT_FMT(FALSE,TEXT("解析颜色值失败 [%s]"),S_CW2T(strValue)); value = CR_INVALID; return false; }else { value = RGBA(r,g,b,a); return true; } }
LRESULT SSkinImgFrame2::OnAttrSrc(const SStringW & strValue,BOOL bLoading) { int iPos = strValue.Find(L'{'); if(iPos==-1) return E_FAIL; m_strImgKey = strValue.Left(iPos); SStringW strRgn = strValue.Right(strValue.GetLength()-iPos); if(swscanf(strRgn,L"{%d,%d,%d,%d}",&m_rcImg.left,&m_rcImg.top,&m_rcImg.right,&m_rcImg.bottom)!=4) { CPoint pt; CSize sz; if(swscanf(strRgn,L"{%d,%d,@%d,@%d}",&pt.x,&pt.y,&sz.cx,&sz.cy)!=4) return E_FAIL; m_rcImg = CRect(pt,sz); } IMGPOOL::CPair * p = s_imgPool.Lookup(m_strImgKey); if(p) { SSkinImgFrame::SetImage(p->m_value); p->m_value->AddRef(); }else { IBitmap *pImg=LOADIMAGE2(m_strImgKey); if(!pImg) return E_FAIL; s_imgPool[m_strImgKey]=pImg; SSkinImgFrame::SetImage(pImg); } return S_OK; }
SStringW SLayoutSize::toString() const { SStringW strValue = SStringW().Format(L"%f",fSize); //去掉sprintf("%f")生成的小数点最后无效的0 LPCWSTR pszData = strValue; for(int i=strValue.GetLength()-1;i>=0;i--) { if(pszData[i]!=L'0') { if(pszData[i]==L'.') i--; strValue = strValue.Left(i+1); break; } } return SStringW().Format(L"%s%s",strValue,s_pszUnit[unit]); }