2009-04-23 83 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設施。然而,他們也不容易使用,爲什麼我認爲我可以做得更好呢?首先,我自己做得很好 - 事實證明我錯了:)

  • 最後,雖然我無法確定從您的問題是否真的在那條船上,不要考慮物理距離(毫米等)。你想要得到正確的第一件事是在屏幕上繪製形狀,並在元素之間以正確的比例。然後你想放大/縮小。最後,只有當你到達打印部分時,物理措施纔會發揮作用。你唯一需要弄清楚的地方(這裏稍微簡化一下)是'我需要獲得所需輸出的正確縮放比例是多少'。這有點棘手,但與什麼似乎是你的問題的第一部分(如何繪製你的組件到屏幕)很少有關。

如果您遇到麻煩,請不要猶豫,發佈更具體的問題。我將打印預覽和打印代碼作爲打印過程的「通用」部分的一個例子,儘管每個應用程序的具體情況明顯不同。