如何仅使用 gdi 调用在 win32 中绘制选定的文本?

发布于 2024-07-18 06:35:37 字数 91 浏览 3 评论 0原文

我尝试使用两个 TextOut 调用和 TA_UPDATECP 标志绘制选定的文本,但是当我移动选定区域时,字符会移动一点。

有人知道正确的方法吗?

I tried to draw a selected text using two TextOut call and TA_UPDATECP flag but when I move the selected area, the characters are moving a bit.

Does someone know the correct way to do that ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤单情人 2024-07-25 06:35:38

我相信抗锯齿和 ClearType 可以在小数像素位置绘制文本。 如果您绘制一串文本,然后尝试重新绘制中间的一部分,则可能无法从与中间字符完全相同的位置开始绘制文本。 技巧似乎是重新绘制整个字符串,但对所选文本使用剪切区域。

本教程中关于编写 Win32 文本编辑器的第 4 章 详细介绍了如何绘制选定的文本。

I believe that antialiasing and ClearType can draw text at fractional pixel positions. If you draw a string of text, and then try to redraw a portion of the middle, there might not be a way for you to draw text starting at exactly the same position as those characters in the middle. The trick seems to be to redraw the entire string, but with a clipping region for the selected text.

Chapter 4 in this tutorial on writing a Win32 text editor goes into quite some detail on how to draw selected text.

对不⑦ 2024-07-25 06:35:37

According to the MSDN documentation, when you have set the TA_UPDATECP flag using SetTextAlign(), TextOut() ignores its position parameters in favor of the device context's current position. Without seeing your code, I suspect that your drawing algorithm calls TextOut() with a current position that differs slightly based on the selection.

As a debugging strategy, you can call GetCurrentPositionEx() just before you call TextOut() to obtain the current position and make sure it matches your expectation for where the text should be drawn.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文