RichEditCtrl使用方法归纳

2012-02-10 21:14:24|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, MFC, 界面设计|来源:唯设编程网

.函数应用

a.设置字体(主要是通过SetSelectionCharFormat)

CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask|=CFM_BOLD;
cf.dwEffects|=CFE_BOLD;//设置粗体,取消用cf.dwEffects&=~CFE_BOLD;
cf.dwMask|=CFM_ITALIC;
cf.dwEffects|=CFE_ITALIC;//设置斜体,取消用cf.dwEffects&=~CFE_ITALIC;
cf.dwMask|=CFM_UNDERLINE;
cf.dwEffects|=CFE_UNDERLINE;//设置斜体,取消用cf.dwEffects&=~CFE_UNDERLINE;
cf.dwMask|=CFM_COLOR;
cf.crTextColor = RGB(255,0,0);//设置颜色
cf.dwMask|=CFM_SIZE;
cf.yHeight =200;//设置高度
cf.dwMask|=CFM_FACE;
strcpy(cf.szFaceName ,_T("隶书"));//设置字体
rich.SetSelectionCharFormat(cf);

b.设置字体的行间距
要用richedit2.0以上

PARAFORMAT2 pf;
pf.cbSize = sizeof(PARAFORMAT2);
pf.dwMask = PFM_NUMBERING | PFM_OFFSET;
pf.wNumbering = PFN_BULLET;//注意PFM_NUMBERING
pf.dxOffset = 10;
VERIFY(SetParaFormat(pf));

常用的dwMask有
PFM_NUMBERING 成员 wNumbering 才起作用,项目符号,默认用PFN_BULLET
2 使用阿拉伯数字 (1, 2, 3, ...).  
3 使用小写字母 (a, b, c, ...).  
4 使用大写字母 (A, B, C, ...).  
5 使用小写罗马数字 (i, ii, iii, ...).  
6 使用大写罗马数字 (I, II, III, ...).  
7 自定义,字符见成员 wNumberingStart.  

PFM_OFFSET 成员 dxOffset 才起作用,缩进,单位twips
PFM_STARTINDENT 成员 dxStartIndent 才起作用,首行缩进
PFM_SPACEAFTER 成员 dySpaceAfter 才起作用,段间距
PFM_LINESPACING 成员 dyLineSpacing 才起作用,行间距

c.设置CRichEditCtrl(2.0)背景透明
long style = ::GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE);
style &= WS_EX_TRANSPARENT;
::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, style);
或 CreateEx,然后把WS_EX_TRANSPARENT样式加上 e.得到内容有三种

1)GetWindowText

2)使用EM_GETTEXTEX

GETTEXTEX gt;
gt.cb = 200;
gt.flags = GT_DEFAULT;
gt.codepage = CP_ACP ;
gt.lpDefaultChar = NULL;
gt.lpUsedDefChar = NULL;
SendMessage(EM_GETTEXTEX,(WPARAM)>,(LPARAM)text);

3)StreamOut(主要用于RTF等格式输出)

static DWORD CALLBACK
MyStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
    CFile* pFile = (CFile*) dwCookie;    pFile->Write(pbBuff, cb);
    *pcb = cb;    return 0;
}
CFile cFile(TEXT("myfile.rtf"), CFile::modeCreate|CFile::modeWrite);
EDITSTREAM es;
es.dwCookie = (DWORD) &cFile;//设置用例参数,以便回调函数调用
es.pfnCallback = MyStreamOutCallback;
pmyRichEditCtrl->StreamOut(SF_RTF, es);

读入可以此类推,SetWindowText,EM_SETTEXTEX,StreamIn f.查找字符串

FINDTEXTEX ft;
ft.chrg.cpMin = 0;
ft.chrg.cpMax = -1;
ft.lpstrText = "|";
long lPos = FindText(0, &ft); 如果要继续查找,修改cpMin,如
int nCount = 0;
do
{
    long lPos = GetRichEditCtrl().FindText(0, &ft);
    if( -1 == lPos) break;
    ft.chrg.cpMin = lPos + strlen(ft.lpstrText);
    ++nCount;
}while(TRUE);

g.重载OnProtected函数得到对应的消息,如粘贴等

void CMYichEditorView::OnProtected(NMHDR* pNMHDR, LRESULT* pResult)
{
    ENPROTECTED* pEP = (ENPROTECTED*)pNMHDR;  
    switch (pEP->msg) {
        case WM_KEYDOWN://按键,判断pEP->wParam
        case WM_PASTE://粘贴
        case WM_CUT://剪切
        case EM_SETCHARFORMAT:
        default:
            break;
    };
    *pResult = FALSE;
}
发表评论0条 】
网友评论(共?条评论)..
RichEditCtrl使用方法归纳