如何实现GDI绘制的MFC CScrollView的缩放

时间:2012-01-07 22:41:51

标签: c++ mfc gdi

我在CScrollView中使用GDI绘制了一些图形和文本。我需要实现缩放功能。我只需要缩放输出功能,无需缩放 比正常渲染更多。

以下是我最好的想法:

  1. 使用带有SetWindowExt / SetViewportExt的MM_ANISOTROPIC映射模式......此方法的问题在于它不会缩放文本。有没有办法迫使MFC缩放文本?我唯一能想到的是根据所选的缩放值设置文字字体大小,但我不确定这看起来是不是很好......

  2. 绘制到内存DC,并使用StretchBlt blit到适当大小的客户区(使用SetScrollSizes设置...)。这将解决文本缩放问题。

  3. 还希望在该过程中具有抗混叠效果。我认为上述两种方法本身都应该完成,但我不知道哪种方法会更好看。此外,我将不得不稍后实现打印/打印预览功能(使用MFC在doc / view架构中的标准实现),因此我需要该方法与之兼容。

    请接受您的建议。哪条路走,为什么。也许还有其他选择吗?..

2 个答案:

答案 0 :(得分:1)

使用MFC时,你真的不想弄乱映射模式 - MFC本身已经将它用于(至少)打印预览功能。

我会看到SetWorldTransform是否适合您。至少使用vector / TrueType字体,它会将文本与其他所有内容一起缩放。请注意,在SetWorldTransform开始工作之前,您需要使用GM_ADVANCED致电SetGraphicsMode

答案 1 :(得分:0)

我最终使用了我在问题中提出的第二种方法,但是使用了DIB而不是DDB(而StretchDIBits()而不是StretchBlt()),因为它证明了问题较少,特别是在使用大位图时,以及打印时。