2012-01-07 47 views
0

我在CScrollView中用GDI繪製了一些圖形和文本。我需要實現縮放功能。我只需要變焦功能,不需要變焦比通常呈現更多。如何在GDI繪製的MFC中實現縮放CScrollView

這裏是我最好的想法:

  1. 使用MM_ANISOTROPIC映射模式,SetWindowExt/SetViewPortExt函數......這種方式的問題在於,它不適合文本。有沒有辦法強制MFC擴展文本?我只能想到的是根據所選的縮放值設置文本字體大小,但我不確定這是否會看起來很好...畢竟...

  2. 繪製到內存DC,並使用StretchBlt blit到適當大小的客戶區(使用SetScrollSizes設置...)。這將解決文本縮放問題。

此外,期望在該過程中具有抗混疊效果。我認爲上述兩種方法本身都應該完成這一點,但我不知道哪一個看起來會更好。此外,我將不得不稍後實施打印/打印預覽功能(使用來自doc/view架構的MFC標準實現),所以我需要該方法與此兼容。

需要你的建議。走哪條路以及爲什麼。也許其他選項也存在?..

回答

0

我結束了使用我的問題提出的第二個方法,但所用的DIB代替DDBS(和StretchDIBits()而不是StretchBlt()),因爲它被證明導致較少的問題,使用大位圖尤其是當和打印時。

1

當你使用MFC時,你真的不希望混淆映射模式 - MFC本身已經將它用於(至少)打印預覽功能。

我會看看如果SetWorldTransform會爲你工作。至少使用vector/TrueType字體時,它會將文本與其他所有內容一起縮放。請注意,在SetWorldTransform工作之前,您需要撥打SetGraphicsMode並撥打GM_ADVANCED

+0

謝謝你的答覆,傑裏。不幸的是,你提到的方法有兩個問題:它不縮放文本(使用DrawText API繪製),並且沒有抗鋸齒效果(可能是因爲它執行座標和大小的邏輯轉換,但是例如LineTo函數仍然繪製鋸齒線)。所以這給我留下了第二種方法,我上面描述了(繪製到mem dc然後StretchBlt) - 你怎麼看待它?你能推薦它嗎?.. – 2012-01-08 23:50:45