C++ 在MFC中实现缩放控件

C++ 在MFC中实现缩放控件,c++,mfc,scroll,zooming,pixel,C++,Mfc,Scroll,Zooming,Pixel,我正在使用一个“打印预览”工具来显示幻灯片的概览,幻灯片上有矩形阵列的样本点 载玻片的尺寸通常为25 x 75 mm,点样的直径通常为0.1 mm。幻灯片周围通常有2毫米的间隙,没有打印斑点 点(节距)之间的距离精确到0.01mm。例如,需要在像素中区分0.20和0.29 mm的间距。在这个阶段,只要斑点可见且不重叠,100%的准确度可能并不重要 如果您能告诉我使用什么技术来创建幻灯片/点的位图表示,以及使用任意放大率查看幻灯片布局,我将不胜感激 这并不一定是复杂的-一个1:1的表现加上一个更小

我正在使用一个“打印预览”工具来显示幻灯片的概览,幻灯片上有矩形阵列的样本点

载玻片的尺寸通常为25 x 75 mm,点样的直径通常为0.1 mm。幻灯片周围通常有2毫米的间隙,没有打印斑点

点(节距)之间的距离精确到0.01mm。例如,需要在像素中区分0.20和0.29 mm的间距。在这个阶段,只要斑点可见且不重叠,100%的准确度可能并不重要

如果您能告诉我使用什么技术来创建幻灯片/点的位图表示,以及使用任意放大率查看幻灯片布局,我将不胜感激

这并不一定是复杂的-一个1:1的表现加上一个更小和更大的放大倍数开始。我可能无法放大太多,因为这些斑点将变得太小而无法显示

对于更大的放大倍数,我可能还需要了解如何实现水平/垂直滚动控件,但我将在后面讨论这个问题

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


干杯。

让我们从头开始:

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

  • 我认为“幻灯片”和“景点”是针对你所在行业的——它们是与问题相关还是只是为了举例说明

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

  • Windows控件具有滚动和缩放所需的所有功能。它们位于设备上下文中:SetWindowExt()、SetViewportExt()、SetViewportOrg()等。请查看MSDN“CDC成员”页面的“坐标函数”。也就是说,我曾经“手动”实现过缩放和滚动,通过跟踪滚动条的位置、缩放我控件的命令等。这是一件让人头疼的事,回头看,我应该使用Windows设备。不过,它们也不容易使用,这就是为什么我认为自己可以做得更好的原因——结果证明我错了:)

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

如果你遇到麻烦,不要犹豫,发布更具体的问题。我这里有打印预览和打印代码,作为打印过程中“通用”部分的示例,尽管每个应用程序的细节明显不同