2

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

我正在查看网络上记录的 CZoomView 并使用 CDC SetMapMode 到 MM_ISOTROPIC,但这似乎真的只在 OnDraw 方法中有用,因为 CZoomView 在实现时有一个 TODO 来实现绘图代码。由于这些是 Microsoft 控件,我们只是让它们自己绘制。

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

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

想法或想法?

4

2 回答 2

1

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


我知道这是一个老问题,我不会回答以获得积分。我本来打算自己问同样的问题,但是在我输入完问题后遇到了这个问题。由于您不应该在这里提出重复的问题,因此我发布此答案,而不是希望有人会出现并用更好的答案证明我错了。或者可能马克想出了答案,并会收到我的答案通知并分享他学到的东西。就我而言,我需要制作一个像 Adob​​e Acrobat 这样的用户界面,并带有可填写的表单,但基础是相同的。

于 2014-05-21T23:40:12.927 回答
0

为什么不直接更改 Windows 中的 DPI 设置(显示 -> 设置自定义文本大小)?这是使事物变小/变大的常用方法,如果用户在阅读内容时遇到困难,他们应该这样做。

Windows 标准控件具有“DPI 感知”功能,因此您可以免费进行缩放。

于 2012-07-12T07:20:12.703 回答