您的位置:首页 > 其它

RichEdit中显示的控制

2006-01-26 10:34 288 查看
关于RichEdit使用的几个经验代码

该段代码的功能为在RichEdit中显示指定的字符串(pPreview,类型为BYTE*),可以为 text 或者 rtf 之类。在有滚动条的情况下,会自动进行滚动,从第一行起始处显示。在显示 rtf 后再显示普通文本时,不会沿用上一个 rtf 中的格式。

其中之所以采用BYTE*型的pPreview,而不使用CString型的sPreview,是因为在Unicode编译环境下编译后,当Windows系统的区域设置不是中国而是English等地方时,采用非Unicode编码的字符串会显示乱码。所以这里采用BYTE*型,并要求将字符串转变Unicode形式。

CHARRANGE charrage;

int nFirstVisibleLine = 0;

charrage.cpMin = 0;

charrage.cpMax = -1;

m_ctlRichEdit.SendMessage(EM_EXSETSEL, 0, (LPARAM)&charrage);

m_ctlRichEdit.SendMessage(EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&m_DefaultCF);

m_ctlRichEdit.SendMessage(EM_REPLACESEL, false, (LPARAM)pPreview);

charrage.cpMin = 0;

charrage.cpMax = 0;

m_ctlRichEdit.SendMessage(EM_EXSETSEL, 0, (LPARAM)&charrage);

nFirstVisibleLine = m_ctlRichEdit.SendMessage(EM_GETFIRSTVISIBLELINE, 0, 0);

m_ctlRichEdit.SendMessage(EM_LINESCROLL, 0, -nFirstVisibleLine);

m_ctlRichEdit.ShowWindow(SW_SHOW);

设置RichEdit中的字体。进行数据的16进制显示时,为了美观和方便阅读,一般会使用字体自身宽度一定的字体,例如字体"Courier New",或者直接使用系统已定制的字体"ANSI_FIXED_FONT"。

HFONT hf;

LRESULT lErrorCode = 0;

char pBuffer[100];

CString sTmp;

hf = (HFONT)GetStockObject(ANSI_FIXED_FONT); // Set the edit control's font to a fixed-width font.

m_Font.Attach(hf);

m_wndRichEdit.SetFont(&m_Font);

该段代码的功能是显示信息之后将进行滚动以显示最后的内容。

m_wndLog.SendMessage(WM_VSCROLL, SB_BOTTOM, 0);

使用Clear()函数或使用WM_CLEAR消息清除选中文本,RichEdit控件不能为ReadOnly属性。

删除从第一行开始的数行信息,可使用以下代码

void CDSLog::DeleteLines(int nCount)

{

CHARRANGE cr = { 0 };

for (int i = 0; i < nCount; i++)

{

cr.cpMax += m_wndLog.SendMessage(EM_LINELENGTH, cr.cpMax, 0);

cr.cpMax++;

}

m_wndLog.SendMessage(EM_EXSETSEL, 0, (LPARAM)&cr);

m_wndLog.SendMessage(EM_REPLACESEL, false, (LPARAM)_T("")); //此处,如果RichEdit控件不为ReadOnly,可使用WM_CLEAR消息。

if (m_wndLog.SendMessage(EM_LINELENGTH, 0, 0) == 0)

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: