65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.25/5 (7投票s)

2001年7月1日

3分钟阅读

viewsIcon

111779

downloadIcon

2760

这是一个简单的文本显示视图,具有文字换行和文本选择功能。

Sample Image - textviewshot.jpg

背景

CTextView 是一个 CView 派生类,可在视图中显示只读文本。它的特别之处在于能够进行文字换行和文本选择。该类是我之前用于解析和显示 IRC 消息(与 MIRC 中的视图完全相同)的类的修改版本。唯一的区别在于文本的方向。IRC 视图通常从下往上显示文本,而 CTextView 则像记事本一样正常地从上往下显示。

在您经常向只读视图追加文本并且不希望滚动条到处跳动、希望轻松添加颜色而不必重写编辑控件、希望获得一个简洁、流畅且不太笨重的控件的情况下,您可能更喜欢 CTextView 而不是 CEditViewCTextView 没有文本限制。它使用 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.hRegistryManager.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_VSCROLLWM_HSCROLL 样式。

CIRCTextView??

我实际上是在这之前做的。但我还在调整它。很快就会发布。

Copyright

此代码是免费的,就像沙漠中的免费沙子一样。除使用了其他类的部分外,没有版权,即 CMemDcCAutoFont

历史

  • 2001年7月2日:发布日期

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.