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]); }
BOOL SObject::InitFromXml( pugi::xml_node xmlNode ) { if(!xmlNode) return FALSE; #ifdef _DEBUG { pugi::xml_writer_buff writer; xmlNode.print(writer,L"\t",pugi::format_default,pugi::encoding_utf16); m_strXml=SStringW(writer.buffer(),writer.size()); } #endif //设置当前对象的属性 //优先处理"class"属性 pugi::xml_attribute attrClass=xmlNode.attribute(L"class"); if(attrClass) { attrClass.set_userdata(1); //预处理过的属性,给属性增加一个userdata SetAttribute(attrClass.name(), attrClass.value(), TRUE); } for (pugi::xml_attribute attr = xmlNode.first_attribute(); attr; attr = attr.next_attribute()) { if(attr.get_userdata()) continue; //忽略已经被预处理的属性 SetAttribute(attr.name(), attr.value(), TRUE); } if(attrClass) { attrClass.set_userdata(0); } //调用初始化完成接口 OnInitFinished(xmlNode); return TRUE; }
SStringW SChatEdit::GetFormatText() { SStringW strTxt; TEXTRANGE txtRng; txtRng.chrg.cpMin =0; txtRng.chrg.cpMax = SSendMessage(WM_GETTEXTLENGTH); txtRng.lpstrText = (LPTSTR)strTxt.GetBufferSetLength(txtRng.chrg.cpMax); SSendMessage(EM_GETTEXTRANGE,0,(LPARAM)&txtRng); strTxt.ReleaseBuffer(); SComPtr<IRichEditOle> ole; SSendMessage(EM_GETOLEINTERFACE,0,(LPARAM)(void**)&ole); SStringW strMsg; int iPlainTxtBegin = 0; for(int i=0;i<strTxt.GetLength();i++) { if(strTxt[i] == 0xfffc) {//找到一个OLE对象 strMsg += strTxt.Mid(iPlainTxtBegin,i-iPlainTxtBegin); iPlainTxtBegin = i+1; REOBJECT reobj={sizeof(reobj),0}; reobj.cp = i; HRESULT hr = ole->GetObject( REO_IOB_USE_CP , &reobj, REO_GETOBJ_POLEOBJ); if(SUCCEEDED(hr) && reobj.poleobj) { if(reobj.clsid == CLSID_CSoSmileyCtrl) { SComPtr<ISoSmileyCtrl> smiley; hr = reobj.poleobj->QueryInterface(__uuidof(ISoSmileyCtrl), (void**)&smiley); if(SUCCEEDED(hr)) { SComPtr<ISmileySource> source; hr = smiley->GetSource(&source); SASSERT(SUCCEEDED(hr)); UINT uID = -1; SStringW strSmiley = L"<smiley"; if(SUCCEEDED(source->GetID(&uID))) { strSmiley += SStringW().Format(L" id=\"%d\"",uID); } BSTR strFile; if(SUCCEEDED(source->GetFile(&strFile))) { strSmiley += SStringW().Format(L" path=\"%s\"",strFile); ::SysFreeString(strFile); } strSmiley += L"/>"; strMsg += strSmiley; } } reobj.poleobj->Release(); } } } if(iPlainTxtBegin<strTxt.GetLength()) { strMsg += strTxt.Right(strTxt.GetLength()-iPlainTxtBegin); } return strMsg; }
const SStringW SStringParser::GetNullValue() { return SStringW(); }