当你显示一个字符串|getstrcodepages函数的使用( 二 )

当你显示一个字符串|getstrcodepages函数的使用
文章图片
当然 , 我们一直忽略的所有错误都需要处理 。 如果在我们已经通过几个块之后遇到错误 , 这确实会产生一个大问题 。 我们应该做什么?
我将通过以原始字体、方框等等绘制字符串来处理错误 。 我们不能擦除已经绘制的字符 , 也不能只绘制字符串的一半(因为我们的调用者不知道从哪里恢复) 。 所以我们只用原始字体绘制并希望这样能得到最好的结果 。 至少它没有比字体链接之前更糟 。
将所有这些改进放在一起 , 代码变为了下面的样子:
当你显示一个字符串|getstrcodepages函数的使用
文章图片
最后 , 我们可以将整个操作包装在一个辅助函数中 , 该函数首先尝试使用字体链接 , 如果失败 , 则仅以老式方式绘制文本 。
当你显示一个字符串|getstrcodepages函数的使用
文章图片
好的 , 现在我们有了带有的字回调函数版本的字体链接TextOut , 我们可以继续调整我们的PaintContent函数 , 如下图所示:
当你显示一个字符串|getstrcodepages函数的使用
文章图片
再次运行程序 , 我们可以看到 , 显示的字符串没有再出现方框 。
我没有做的一项改进是:避免每次我们想要绘制文本时都创建IMlangFontLink2指针 。 在实际的工程中 , 你可能会为每个绘图上下文(可能是每个窗口)创建一次多语言对象 , 然后重新使用它以避免每次要绘制字符串时都遍历整个对象创建代码路径 。 总结
古老的API , 古老的技术 , 但是 , 它确实能解决问题 。
还是点个赞吧 。 最后
RaymondChen的《TheOldNewThing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《Howtodisplayastringwithoutthoseuglyboxes》最近我写了个东西
正如你们所知道的 , 拓扑梅尔智慧办公平台(TopomelBox)是一款绿色软件 , 主要面向经常使用电脑的朋友 。 它提供了各种提升办公效率的小功能 , 同时操作上尽可能地简单方便 。

当你显示一个字符串|getstrcodepages函数的使用
文章图片