RichEditCtrl使用方法归纳

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

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

.常见问题

a.可以编译,不能执行的

除非你是在使用CRichEditView,否则你必须在显示该对话框之前调用AfxInitRichEdit初始化RichEditCtrl的运行环境,通常是在你的应用程序的IniInstance成员函数中调用这个函数。

AfxInitRichEdit();

b.升级默认的Riched版本(默认的有一些bug),如
可在InitInstance中添加

LoadLibrary("RICHED20.DLL")

最后注意 FreeLibrary 如果是CRichEditView基类的可用

BOOL CXXXXXXView::PreCreateWindow(CREATESTRUCT& cs)
{
    //装入rich edit version 2.0
    if (LoadLibraryA("RICHED20.DLL") == NULL)
    {
        AfxMessageBox(_T("Fail to load "riched20.dll"."),MB_OK | MB_ICONERROR);
        PostMessage(WM_QUIT,0,0);
        return FALSE;
    } m_strClass = RICHEDIT_CLASSA;//for 2.0 class return CRichEditView::PreCreateWindow(cs);
}

c.最后追加行

richeditctrl.SetSel(-1, -1);     //将光标移动到最后
richeditctrl.ReplaceSel( (LPCTSTR)str );

d.字数限制

CRichEditCtrl::LimitText(long nChars)

e.换行切换

CRichEditView的OnInitialUpdate()函数中加入下面两句:
m_nWordWrap = WrapNone;
WrapChanged();
WrapChanged实际上也是调用
ctrl.SetTargetDevice(NULL, 1); //m_nWordWrap == WrapNone
ctrl.SetTargetDevice(NULL, 0); //m_nWordWrap == WrapToWindow

还有不常用的 m_nWordWrap == WrapToTargetDevice

ctrl.SetTargetDevice(m_dcTarget, GetPrintWidth());

如果是在Dialog中,可使用SetTargetDevice,注意在属性里面加上want return f.有时候不希望带格式的数据粘贴,可通过PasteSpecial选择性粘贴

pmyRichEditCtrl->;PasteSpecial(CF_TEXT);

g.随着输入随着自动滚动条滚动到最后一行

int nFirstVisible = pmyRichEditCtrl->GetFirstVisibleLine();
if (nFirstVisible > 0)
{
   pmyRichEditCtrl->LineScroll(-nFirstVisible, 0);
}

m_cRichEdit.PostMessage(WM_VSCROLL, SB_BOTTOM,0);

h.设置UNDO的次数(只能用在RICHED20以上,即默认不支持,必须升级)

SendMessage(EM_SETTEXTMODE,TM_MULTILEVELUNDO,0);
TM_MULTILEVELUNDO 支持多取消(默认值).可通过EM_SETUNDOLIMIT设置最大次数
SendMessage(EM_SETUNDOLIMIT,100,0); i.响应OnChange
EM_SETEVENTMASK 设置 ENM_CHANGE
long lMask = GetEventMask();
lMask |= ENM_CHANGE;
lMask &= ~ENM_PROTECTED;
SetEventMask(lMask); j.设置只读
CRichEditCtrl::SetReadOnly( BOOL bReadOnly = TRUE );
<123>
发表评论0条 】
网友评论(共?条评论)..
RichEditCtrl使用方法归纳