我在CScrollView中使用GDI绘制了一些图形和文本。我需要实现缩放功能。我只需要缩放输出功能,无需缩放 比正常渲染更多。
以下是我最好的想法:
使用带有SetWindowExt / SetViewportExt的MM_ANISOTROPIC映射模式......此方法的问题在于它不会缩放文本。有没有办法迫使MFC缩放文本?我唯一能想到的是根据所选的缩放值设置文字字体大小,但我不确定这看起来是不是很好......
绘制到内存DC,并使用StretchBlt blit到适当大小的客户区(使用SetScrollSizes设置...)。这将解决文本缩放问题。
还希望在该过程中具有抗混叠效果。我认为上述两种方法本身都应该完成,但我不知道哪种方法会更好看。此外,我将不得不稍后实现打印/打印预览功能(使用MFC在doc / view架构中的标准实现),因此我需要该方法与之兼容。
请接受您的建议。哪条路走,为什么。也许还有其他选择吗?..
答案 0 :(得分:1)
使用MFC时,你真的不想弄乱映射模式 - MFC本身已经将它用于(至少)打印预览功能。
我会看到SetWorldTransform
是否适合您。至少使用vector / TrueType字体,它会将文本与其他所有内容一起缩放。请注意,在SetWorldTransform
开始工作之前,您需要使用GM_ADVANCED
致电SetGraphicsMode
。
答案 1 :(得分:0)
我最终使用了我在问题中提出的第二种方法,但是使用了DIB而不是DDB(而StretchDIBits()
而不是StretchBlt()
),因为它证明了问题较少,特别是在使用大位图时,以及打印时。