【问题标题】:Implementing zoom controls in MFC在 MFC 中实现缩放控件
【发布时间】:2009-04-23 11:08:50
【问题描述】:

我正在开发一个“打印预览”工具,以显示一张幻灯片的概览,上面有矩形阵列的样本点。

载玻片的尺寸通常为 25 x 75 毫米,点样的直径通常为 0.1 毫米。载玻片周边通常有 2 毫米的间隙,不会打印任何点。

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

如果要使用哪些技术来创建幻灯片/点的位图表示并使用任意放大倍数查看幻灯片布局,我将不胜感激。

这不必很复杂 - 以 1:1 的表示加上越来越大的放大倍率开始。我可能不能缩小太多,因为这些点会变得太小而无法表示。

对于更大的放大倍率,我可能还需要了解如何实现水平/垂直滚动控件,但我稍后会解决这个问题。

我想了解我应该了解的任何编程和缩放技术,以便正确实施缩放工具。我最近一直在使用 StretchBlt 函数来改变图像大小,看起来还可以,但是任何其他相关信息都会很有用。

干杯。

【问题讨论】:

    标签: c++ mfc scroll zooming pixel


    【解决方案1】:

    让我们从头开始:

    • 为什么不使用 ::AFXPrintPreview() 和 MFC 的其他打印预览工具?

    • 'slides' 和 'spots' 我认为是您所在行业特有的 - 它们与问题相关还是仅用于说明?

    • StretchBlt() 对你没有多大用处,因为它只会让你进行像素级“缩放”,你需要以更高的精度绘制控件的某个部分.即使你不打算使用 MFC 打印预览的东西,也可以看看它是如何做到的。

    • Windows 控件具有滚动和缩放所需的所有功能。它们位于设备上下文中:SetWindowExt()、SetViewportExt()、SetViewportOrg() 等。在 MSDN 的“CDC Members”页面的“Coordinate Functions”下查看。话虽如此,我曾经通过跟踪滚动条的位置、控件的缩放命令等方式实现了“手动”缩放和滚动。回首往事,我应该使用 Windows 设施。不过,它们也不容易使用,这就是为什么我一开始就认为我自己可以做得更好 - 事实证明我错了:)

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

    如果您遇到问题,请随时发布更具体的问题。我在这里有打印预览和打印代码作为打印过程中“通用”部分的示例,尽管每个应用程序的具体细节显然不同。

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2010-09-20
      • 2019-09-14
      • 1970-01-01
      • 2014-08-15
      相关资源
      最近更新 更多