c – 在Win32 API中绘制格式化文本的最快方法是什么?

前端之家收集整理的这篇文章主要介绍了c – 在Win32 API中绘制格式化文本的最快方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在C中实现一个文本编辑器,只需使用vanilla Win32 API,我正在尝试找到实现语法高亮的最佳方法.我知道现在有一些控制,像闪烁,但我正在做这个为了好玩,所以我想自己做大部分的工作.我也希望它快速轻便.

从我迄今为止所学到的东西,看起来像在GDI中绘制文本的最低级别的选项是TextOut函数.然而,如果我需要继续改变字体颜色,那意味着我需要对TextOut进行很多的调用,以便使用混合格式绘制一个文本.这是没有效率的吗?当语法突出显示和富文本控件实现时,他们是否可能在幕后使用TextOut?还有其他方式吗?在GDI中绘制文本的其他方法只是在TextOut周围的更高级别的包装器吗?

解决方法

DrawText和TextOut都是ExtTextOut的包装器,所以ExtTextOut是低级API.根据我的经验,ExtTextOut非常快,所以我怀疑你会看到ExtTextOut本身的任何性能问题.然而,创建/选择字体可能是性能问题的根源,所以如果您在字体之间来回切换,您可以通过缓存和重用字体(HFONT)而不是每次CreateFont / SelectObject / DeleteObject来实现显着的性能提升.基本上,首次在创建新字体后调用SelectObject,Windows将执行字体匹配过程,以找到您请求的逻辑字体的最佳物理字体.这是一个相当复杂的过程,因此您希望最大限度地减少在性能重要的情况下发生的次数.

许多年前,我开发了一个丰富的编辑控件,这本身就是Microsoft Word的迷你版本.我使用ExtTextOut作为所有文本输出的主要工作.该控件将维护最近使用的字体的字体缓存(默认缓存大小为10个字体).它支持WYSIWYG布局,所以它实际上是使用打印机DC和字体进行所有布局,然后使用屏幕DC和类似的字体渲染屏幕兼容版本,所以有很多额外的工作,这可能不适用于你的情况即使如此,在一天的典型硬件(例如,266 mhz Pentium)上,性能也非常出色.

猜你在找的C&C++相关文章