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

时间:2009-05-03 18:29:02

标签: winapi gdi

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

有人知道这样做的正确方法吗?

2 个答案:

答案 0 :(得分:0)

根据MSDN文档,当您使用SetTextAlign()设置TA_UPDATECP标志时,TextOut()会忽略其位置参数,以支持设备上下文的当前位置。在没有看到你的代码的情况下,我怀疑你的绘图算法调用TextOut(),其当前位置根据选择略有不同。

作为一种调试策略,您可以在调用TextOut()之前调用GetCurrentPositionEx()以获取当前位置,并确保它符合您对文本绘制位置的期望。

答案 1 :(得分:0)

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

这个tutorial on writing a Win32 text editor详细介绍了如何绘制选定的文字。