2009-04-23 84 views
0

我正在“打印预览”工具中显示其上带有矩形样本点阵列的幻灯片概述。在MFC中实现缩放控件

幻灯片通常测量25 x 75毫米,斑点样本直径通常为0.1毫米。在幻灯片的周边通常有2毫米的间隙,没有打印点。

点(间距)之间的距离精确到0.01mm。例如0.20和0.29毫米的间距需要在像素中进行区分。代表斑点本身,只要斑点可见并且不重叠,100%的准确性在此阶段可能不是至关重要的。

对于使用什么技术来创建幻灯片/点的位图表示以及使用任意级别的放大率来查看幻灯片布局,我将不胜感激。

这不一定要复杂 - 1:1表示加上更大和更大的放大倍率。我可能无法缩小太多,因为这些斑点会变得太小而无法呈现。

对于更大的放大倍数,我可能需要了解实施水平/垂直滚动控制,但我会稍后解决。

我想了解任何编程和缩放技术,我应该知道为了正确实现缩放功能。我最近一直在使用StretchBlt函数来改变图像大小,这看起来没问题,但是其他任何相关的信息都是有用的。

干杯。

回答

1

让我们从头开始:

  • 你为什么不使用:: AFXPrintPreview()和MFC的打印预览设施的休息吗?

  • “幻灯片”和“斑点”特定于您的行业我认为 - 它们与问题相关还是仅用于说明?

  • StretchBlt()不会为你做很多好事,因为它只会让你做像素级的“缩放”,你需要的是以更高的精度绘制你的控件的某个部分。即使你不打算使用MFC打印预览的东西,也要看看它是如何完成的。

  • Windows控件具有滚动和缩放所需的全部功能。它们位于设备上下文中:SetWindowExt(),SetViewportExt(),SetViewportOrg()等。查看MSDN的“CDC成员”页面的“坐标函数”。话虽如此,我曾经通过跟踪滚动条的位置,缩放我的控件的命令等来实现“手动”缩放和滚动。这是一个痛苦的屁股,回想起来,我应该使用Windows设施。然而,他们也不容易使用,为什么我认为我可以做得更好呢?首先,我自己做得很好 - 事实证明我错了:)

  • 最后,虽然我无法确定从您的问题是否真的在那条船上,不要考虑物理距离(毫米等)。你想要得到正确的第一件事是在屏幕上绘制形状,并在元素之间以正确的比例。然后你想放大/缩小。最后,只有当你到达打印部分时,物理措施才会发挥作用。你唯一需要弄清楚的地方(这里稍微简化一下)是'我需要获得所需输出的正确缩放比例是多少'。这有点棘手,但与什么似乎是你的问题的第一部分(如何绘制你的组件到屏幕)很少有关。

如果您遇到麻烦,请不要犹豫,发布更具体的问题。我将打印预览和打印代码作为打印过程的“通用”部分的一个例子,尽管每个应用程序的具体情况明显不同。