首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Win GDI DrawText错误呈现

Win GDI DrawText错误呈现
EN

Stack Overflow用户
提问于 2021-06-23 11:27:12
回答 1查看 118关注 0票数 1

直到今天,我一直在使用GetTextExtentPoint32来度量要呈现的文本,然后再使用DrawText进行呈现。

由于我现在需要呈现一个多行文本,所以我必须将DrawTextDT_CALCRECT一起使用(因为GetTextExtentPoint32忽略换行符)。

然而,这导致文本呈现不同,主要是通过减少字符间距。例如:

底部呈现是在更改后进行的。我隔离了这个问题,通过在使用来自DrawText的原始输出时调用第一个GetTextExtentPoint32来发现这个问题--问题仍然存在。

下面是调用顺序的缩减:

代码语言:javascript
复制
::GetTextExtentPoint32(...); // Result is used
::DrawText(... DT_CALCRECT); // Result is unused
BITMAPINFOHEADER bih = { size values from GetTextExtentPoint32 };
hBitMap = ::CreateDIBSection(... (BITMAPINFO*)&bih, ...); 
::SelectObject (hdc, hBitMap);
::DrawText(...); // Render the text

注意,如果删除第二行中的DT_CALCRECT并不重要。对DrawText 的呼吁在 CreateDIBSection之前似乎是罪魁祸首。

我还应该做些什么?

EN

回答 1

Stack Overflow用户

发布于 2021-06-24 14:55:41

在字体创建过程中,LOGFONT中的字体质量和精度标志如何?你有没有试着看看这会不会有什么区别?

我也不明白最后一句。你是说如果你移除DrawText (.DT_CALC)还是移动 CreateDIBSection的结果是不同的,没有坏的字符间距?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68098947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档