void CTWScriptEdit::OnSelectfont() { // TODO: Add your command handler code here CHARFORMAT cf; LOGFONT lf; memset(&cf, 0, sizeof(CHARFORMAT)); memset(&lf, 0, sizeof(LOGFONT)); //判断是否选择了内容 BOOL m_bSelect = (GetSelectionType() != SEL_EMPTY) ? TRUE : FALSE; if (m_bSelect) { GetSelectionCharFormat(cf); } else { GetDefaultCharFormat(cf); } //得到相关字体属性 BOOL bIsBold = cf.dwEffects & CFE_BOLD; BOOL bIsItalic = cf.dwEffects & CFE_ITALIC; BOOL bIsUnderline = cf.dwEffects & CFE_UNDERLINE; BOOL bIsStrickout = cf.dwEffects & CFE_STRIKEOUT; //设置属性 lf.lfCharSet = cf.bCharSet; lf.lfHeight = cf.yHeight/15; lf.lfPitchAndFamily = cf.bPitchAndFamily; lf.lfItalic = bIsItalic; lf.lfWeight = (bIsBold ? FW_BOLD : FW_NORMAL); lf.lfUnderline = bIsUnderline; lf.lfStrikeOut = bIsStrickout; sprintf(lf.lfFaceName, cf.szFaceName); CFontDialog dlg(&lf); dlg.m_cf.rgbColors = cf.crTextColor; if (dlg.DoModal() == IDOK) { dlg.GetCharFormat(cf);//获得所选字体的属性 if (m_bSelect) SetSelectionCharFormat(cf); //为选定的内容设定所选字体 else SetWordCharFormat(cf); //为将要输入的内容设定字体 } }
///////////////////////////////////////////////////////////////////////////// // underlying implementation ///////////////////////////////////////////////////////////////////////////// void CChatControl::addString(CString str, BOOL bBold, COLORREF cr) { int iLength; EDITSTREAM es; CHARFORMAT cf; //avoid replacing selected text iLength = GetTextLength(); SetSel(iLength, iLength); //set the "cookie" es.dwCookie = (DWORD) &str; es.pfnCallback = streamIn; //prepare formatting cf.dwMask = CFM_COLOR | CFM_BOLD; cf.dwEffects = bBold ? CFE_BOLD : 0; cf.crTextColor = cr; SetWordCharFormat(cf); //stream in the text StreamIn(SF_TEXT | SFF_SELECTION, es); }
//插入字串 bool CSkinRichEdit::InsertString(LPCTSTR pszString, CHARFORMAT2 & CharFormat) { //变量定义 bool bResumeSelect; CHARRANGE CharRange; //保存状态 GetSel(CharRange.cpMin,CharRange.cpMax); bResumeSelect=(CharRange.cpMax!=CharRange.cpMin); //搜索变量 LPCTSTR pszHttp=TEXT("http://"); const INT nHttpLength=lstrlen(pszHttp); const INT nStringLength=lstrlen(pszString); //索引定义 INT nStringStart=0; INT nStringPause=0; //字符解释 for (INT i=0;i<nStringLength;i++) { //变量定义 INT nUrlPause=i; //地址判断 if (((i+nHttpLength)<nStringLength)&&(memcmp(&pszString[i],pszHttp,nHttpLength*sizeof(TCHAR))==0)) { //设置索引 nUrlPause=i+nHttpLength; //地址搜索 while (nUrlPause<nStringLength) { //字符判断 if (EfficacyUrlChar(pszString[nUrlPause])==true) { nUrlPause++; continue; } break; } } //终止字符 if (nUrlPause<=(i+nHttpLength)) nStringPause=(i+1); //插入字符 if ((i==(nStringLength-1))||(nUrlPause>(i+nHttpLength))) { //普通字符 if (nStringPause>nStringStart) { //获取缓冲 CString strNormalString; LPTSTR pszNormalString=strNormalString.GetBuffer(nStringPause-nStringStart+1); //拷贝字符 pszNormalString[nStringPause-nStringStart]=0; CopyMemory(pszNormalString,&pszString[nStringStart],(nStringPause-nStringStart)*sizeof(TCHAR)); //释放缓冲 strNormalString.ReleaseBuffer(); //插入消息 SetSel(-1L,-1L); SetWordCharFormat(CharFormat); ReplaceSel((LPCTSTR)strNormalString); } //连接地址 if (nUrlPause>(i+nHttpLength)) { //获取缓冲 CString strUrlString; LPTSTR pszUrlString=strUrlString.GetBuffer((nUrlPause-i)+1); //拷贝字符 pszUrlString[nUrlPause-i]=0; CopyMemory(pszUrlString,&pszString[i],(nUrlPause-i)*sizeof(TCHAR)); //释放缓冲 strUrlString.ReleaseBuffer(); //构造格式 CHARFORMAT2 CharFormatHyper; CharFormatHyper=CharFormat; //效验地址 if (EfficacyUrlString(strUrlString)==true) { CharFormatHyper.dwMask|=CFM_LINK; CharFormatHyper.dwEffects|=CFE_LINK; } //插入消息 SetSel(-1L,-1L); SetWordCharFormat(CharFormatHyper); ReplaceSel((LPCTSTR)strUrlString); } //设置索引 nStringStart=__max(i,nUrlPause); } //设置索引 i+=(nUrlPause-i); } //状态设置 if (bResumeSelect==true) SetSel(CharRange); else PostMessage(WM_VSCROLL,SB_BOTTOM,0); return true; }