Mfc Visual C+中的缩放CWnd控件+;

Mfc Visual C+中的缩放CWnd控件+;,mfc,visual-c++,Mfc,Visual C++,我们有一个CWnd,它有几个控件(CButton、CEdit、CStatic等),并且希望找到一种方法允许用户放大和缩小控件,从而使控件变大/变小。控件本身需要更改大小以及控件内的文本标签(如按钮文本) 我查看了web上记录的CZoomView,并使用CDC SetMapMode对MM_各向同性进行了修改,但这似乎只在OnDraw方法中有用,因为CZoomView在实现时需要执行绘图代码。因为这些是微软的控件,我们只让它们自己画 这可能吗?似乎我应该能够使用调整设备上下文来认为设备到逻辑单元的比

我们有一个CWnd,它有几个控件(CButton、CEdit、CStatic等),并且希望找到一种方法允许用户放大和缩小控件,从而使控件变大/变小。控件本身需要更改大小以及控件内的文本标签(如按钮文本)

我查看了web上记录的CZoomView,并使用CDC SetMapMode对MM_各向同性进行了修改,但这似乎只在OnDraw方法中有用,因为CZoomView在实现时需要执行绘图代码。因为这些是微软的控件,我们只让它们自己画

这可能吗?似乎我应该能够使用调整设备上下文来认为设备到逻辑单元的比例是不同的,但我想不出如何让控件实现这一点

int previousMode = pDC->SetMapMode(MM_ISOTROPIC);
CSize previousWin = pDC->SetWindowExt(100,100);
CSize previousExt = pDC->SetViewportExt(m_zoom, m_zoom);

想法还是想法?

为什么不在Windows中更改DPI设置(显示->设置自定义文本大小)?这是把东西变小/变大的常用方法,如果用户阅读东西有困难,他们应该这样做


Windows标准控件是“DPI感知”的,因此您可以免费获得缩放功能。

,这在Win32用户/标准/通用控件中是不可能的,因为Windows的“User32”层都基于像素,您提到的GDI函数在该级别不起作用,并且在用户API中没有等效项(窗口句柄与设备上下文)



我知道这是一个老生常谈的问题,我回答这个问题不是为了得分。我本来打算自己问这个问题的,但在我把问题打完之后,我发现了这个问题。既然你不应该在这里问重复的问题,我就把这个答案贴在这里,希望有人会来用更好的答案证明我错了。或者马克可能已经找到了答案,他会得到我的答案的通知,并分享他学到的知识。在我的情况下,我需要制作一个类似Adobe Acrobat的UI,带有可填充表单,但基本原理是一样的。

但为什么需要“缩放”控件?想想看,你是如何使用类似于此页面的表单在网页浏览器中更改缩放的。当你缩放时,它会以相同的比例更改所有文本和控件的大小。我们一直在寻找一种在CWnd中实现这一点的方法,但似乎不可行。无论如何,我现在已经离开了该项目,所以它是可行的它不再在我的范围内。如果每个用户都想影响他们的所有应用程序,这是一个选项。我们需要将此特定表单与全局DPI设置分开进行缩放。这是一个很长的故事…感谢分享。我从来没有找到一个好的解决方案,我不认为有办法解决您提到的确切原因。如果其他人找到了一种方法,他们可以提供他们的答案,但现在我会接受你的答案,因为我同意。这在MFC中是绝对不可能的,但在Qt中,即使不编码也很容易实现。