带字词环绕和文本选择的 Textout






4.25/5 (7投票s)
2001年7月1日
3分钟阅读

111779

2760
这是一个简单的文本显示视图,具有文字换行和文本选择功能。
背景
CTextView
是一个 CView
派生类,可在视图中显示只读文本。它的特别之处在于能够进行文字换行和文本选择。该类是我之前用于解析和显示 IRC 消息(与 MIRC 中的视图完全相同)的类的修改版本。唯一的区别在于文本的方向。IRC 视图通常从下往上显示文本,而 CTextView
则像记事本一样正常地从上往下显示。
在您经常向只读视图追加文本并且不希望滚动条到处跳动、希望轻松添加颜色而不必重写编辑控件、希望获得一个简洁、流畅且不太笨重的控件的情况下,您可能更喜欢 CTextView
而不是 CEditView
。CTextView
没有文本限制。它使用 IRC 颜色编码方案来显示颜色。上图显示的是一个包含颜色的 MIRC 日志文件。
在代码中使用 CTextView
要将 CTextView
用于您的代码,您必须将您的 CView
派生类更改为 CTextView
派生类。这可以通过在派生类的 .h 和 .cpp 文件中进行简单的文本替换来完成。将 TextView.h, TextView.cpp, Memdc.h, Memdc.cpp, FontObject.h, FontObject.cpp, AutoFont.h, AutoFont.cpp, RegistryManager.h 和 RegistryManager.cpp 导入到您的项目中。
添加文本
CTextView::AddLine(CString str)
向视图追加一行文本。要显示颜色,请使用 IRC 颜色方案模型进行格式化,例如:
strText.Format("\x03%02d%s\x03 %s",8,"hello","world");
AddLine(strText);
将显示黄色的“hello
”和默认颜色的“world
”。\x03
是颜色标记。第一个 \x03
表示开始颜色,最后一个 \x03
表示停止颜色。实际的颜色编号必须是 xx 格式,例如 08 或 02 或 11(不要超过 15)。
文字换行
void CTextView::SetWordWrap(bool bWrapText)
更改文字换行模式。如果启用了文字换行,将显示一个水平滚动条。否则,它将被隐藏。
文本选择
鼠标释放时,选定的文本会自动复制到剪贴板。就像在 MIRC 中一样。
更改字体
void CTextView::SetFont( LOGFONT& rFont )
使用 logfont
结构设置字体。我包含了我创建的一个名为 CFontObject
的类,它可以将字体序列化到注册表中。我还包含了我的注册表类,CFontObject
使用它来实现此目的。另一个名为 CAutoFont
的类是我在 CodeProject 上找到的,CFontObject
使用它来轻松创建字体。只需调用 CFontObject("Arial")
,就会使用适当大小的 Arial 字体。如果您不指定字体,将使用系统字体。
背景、前景和颜色表
这些可以在构造函数中更改。您可以轻松地添加函数来随时更改它们。
平面滚动条
#define USEFLATSB 1
以启用平面滚动条。注释掉它以使用普通滚动条。
致可能修改代码的人
对于正常使用,您可能只处理 AddLine
函数。但如果您打算更改源代码或调整派生类,有几件事您应该了解。如果窗口大小或字体发生变化,您应该调用 recalclines()
、updatevscroll()
和 updatehscroll()
。如果您在派生类中重写了 OnPaint()
,请调用 CTextView::Paint()
而不是 CTextView::OnPaint()
。请记住传递正确的客户区矩形。如果客户区矩形发生变化,请调用 SetClientRect()
并传入正确的客户区矩形。CTextView
使用 HWND
的滚动条进行滚动。如果您需要修改此功能(特别是如果您打算在视图中添加自己的编辑框和列表框等),请将滚动条调用替换为您自己的滚动条类的调用,并从 HWND
中删除 WM_VSCROLL
和 WM_HSCROLL
样式。
CIRCTextView??
我实际上是在这之前做的。但我还在调整它。很快就会发布。
Copyright
此代码是免费的,就像沙漠中的免费沙子一样。除使用了其他类的部分外,没有版权,即 CMemDc
和 CAutoFont
。
历史
- 2001年7月2日:发布日期
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。