- 该段代码的功能为在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)
}