加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:16:53 所属栏目:百科 来源:网络整理
导读:我正在C中实现一个文本编辑器,只需使用vanilla Win32 API,我正在尝试找到实现语法高亮的最佳方法.我知道现在有一些控制,像闪烁,但我正在做这个为了好玩,所以我想自己做大部分的工作.我也希望它快速轻便. 从我迄今为止所学到的东西,看起来像在GDI中绘制文本的
我正在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)上,性能也非常出色.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读