如何在 mfc 应用程序中支持从右到左打印

Posted

技术标签:

【中文标题】如何在 mfc 应用程序中支持从右到左打印【英文标题】:How to support right to left printing in mfc application 【发布时间】:2015-01-20 11:09:51 【问题描述】:

我的应用程序从右到左打印时出现问题。我使用 codejock 报告控件;它可以很好地打印从左到右的视图,这是一个示例:

当布局为 rtl 时,控件在屏幕上呈现得非常好,打印预览也很好,但打印会导致文档失真,如下所示:

我试图覆盖视图的 OnPrepareDC 并使用 pDC->SetLayout(LAYOUT_RTL) 但失败了,我需要有关如何解决此问题的帮助。

【问题讨论】:

您联系过 CodeJock 支持或论坛吗?似乎是他们应该能够提供帮助的常见问题。 在 XTPReportView.cpp 文件中,他们有一条关于在打印模式下不支持 rtl 但在预览中没问题的评论,我想修复它或找到任何解决方案,这就是评论。 if (pInfo->m_bPreview) //RTL 中的 PRINT MODE 不起作用! 【参考方案1】:

其实我已经找到解决 RTL 打印问题的方法了。

问题的原因是并非所有打印机的驱动程序都支持镜像,因此在打印机的 DC 上调用 SetLayout(RTL) 函数将无法在所有打印机的驱动程序中工作。

第一步是根本不调用SetLayout(RTL), 那么在 RTL 打印模式下,您应该重写报表绘制管理器类中的绘图方法来设置每个绘图矩形的对齐方式。

【讨论】:

这确实是原因,但我希望如果 codejock 了解您的解决方案并附上您编辑的文件,以便下一个版本带有固定的 rtl 打印,这将非常好。 感谢您考虑我的回答,实际上这正是我所做的。我告诉他们解决方案,我希望他们会考虑。 这很有帮助,为了避免控件中的新功能与您当前的答案发生冲突,他们会在所有下一个版本中考虑到这一点,我希望如此。 我也遇到了同样的问题,能否请您发布一些示例代码 @HuzifaTerkawi 不幸的是,对于这个问题没有直接的解决方案(代码示例),但是,您应该遵循以下准则:1 - 从不调用 SetLayout(RTL)在 DC 上,所以对齐总是从左到右。 2 - 因此,您必须覆盖多个类中的绘图方法,例如 TCXTPReportRow::Draw 以手动修复对齐并以相反的顺序遍历列。

以上是关于如何在 mfc 应用程序中支持从右到左打印的主要内容,如果未能解决你的问题,请参考以下文章

如果操作系统低于 Win10,GraphicsPath AddString 对使用从右到左语言时的字体支持不够

如何在选项卡式活动中设置片段从右到左开始

如何使用 CGAffineTransform Scale 从右到左添加动画和放大动画

Python中从右到左的语言

从右到左滑动抽屉菜单

如何在 Visual Studio IDE 中以从右到左的语言进行注释