2012-07-12 43 views
2

我們有一個CWnd,它有幾個控件(CButton,CEdit,CStatic等),並希望找到一種方法來允許用戶放大和縮小控件變得更大/更小。控件本身需要更改大小以及控件內的文本標籤(如按鈕文本)。Zoom/Scale Visual C++中的CWnd控件

我正在研究Web上記錄的CZoomView,並使用CDC SetMapMode來MM_ISOTROPIC,但這看起來確實只在OnDraw方法中有用,因爲CZoomView在實現時有一個TODO來實現繪圖代碼。由於這些是微軟的控制,我們只是讓他們自己畫。

這甚至可能嗎?似乎我應該能夠使用調整設備上下文來認爲設備對邏輯單元的規模是不同的,但我不能想出如何讓控件遵守這一點。

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

想法或想法?

+0

但是,爲什麼你需要「縮放」一個控件? – Ajay 2012-07-12 07:54:39

+0

想想如何使用此頁面的形式在網頁上更改Web瀏覽器中的縮放。縮放時,它會以相同比例更改所有文本和控件的大小。我們正在尋找一種方法在CWnd中做到這一點,但似乎並不可行。無論如何,我現在已經離開了這個項目,所以它不再在我的盤子上。 – 2012-08-16 20:35:31

回答

1

沒有,這是不可能的Win32用戶/標準/共同控制,因爲Windows的「USER32」層都是基於像素和你提到在該級別不工作的GDI函數,並沒有等同於用戶API(窗口句柄vs設備上下文)。


我知道這是一個老問題,我不回答得分。我本人也會自問這個問題,但是在我輸入完問題後發現了這個問題。既然你不應該在這裏提出重複的問題,我會發布這個答案,而不是希望有人會出現,並用更好的答案證明我錯了。或者馬克可能找出答案,並會得到我的答案的通知,並分享他學到的東西。在我的情況下,我需要製作一個像Adobe Acrobat一樣的具有可填充表單的界面,但基本內容相同。

+0

感謝分享。我從來沒有找到一個好的解決方案,我不認爲你提到的確切原因是有辦法的。如果別人找到了方法,他們可以提供他們的答案,但現在我會接受你的答案,因爲我同意。 – 2014-05-22 16:37:05

+0

這絕對不是MFC可以實現的,但在Qt中甚至不需要編碼就能很容易實現。 – zar 2017-06-08 17:51:14

0

爲什麼不在Windows中更改DPI設置(顯示 - >設置自定義文本大小)?這是使事物變得更小/更大的常用方式,如果用戶在閱讀內容時遇到困難,則需要這樣做。

Windows標準控件屬於「DPI感知」,因此您可以免費獲取縮放。

+0

這是每個用戶的選項,如果他們想影響他們的所有應用程序。我們需要將此特定表格與全球DPI設置分開放大。這是一個很長的故事... – 2012-07-12 17:07:37