[英]MFC how to resize CStatic to a small size
CStatic控件存在以下問題:
當我調用函數SetIcon
:
m_CStatic.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1));
它加載的圖標大小為14x14像素,但控件的實際大小為21x20,我無法對其進行修改。
我試圖打電話給:
m_CStatic.SetWindowPos(NULL,0 , 0, 14, 14, SWP_NOMOVE);
但是,它只會縮小尺寸而不會調整圖標的大小。 結果,我有一部分縮放圖像。
有什么方法可以設置要加載的圖標的大小?
編輯
IDI_ICON1
的實際大小為14x14像素。
另外, CStatic
控件的大小為21x20 ,我無法與設計人員一起更改。
當我加載圖標時,它會被拉伸。 我不知道為什么。
IDI_ICON1
的實際大小為14x14像素。另外,
CStatic
控件的大小為21x20,我無法與設計人員一起更改。
如果要在設計器中查看控件的大小,則此處未將Apple與Apple進行比較。 設計人員以DLU (對話框框單位) 而不 是以 像素為單位報告控件的大小。
DLU和像素之間不一定存在一對一映射。 實際上,DLU的全部要點在於它與像素無關。 單個DLU表示的實際像素數將根據運行應用程序的計算機的字體和DPI而變化。
因此,您看到的行為對我來說非常有意義。
如果您不相信這種DLU與像素的愚蠢性,請嘗試在調試器下運行該應用程序,並使用Spy ++研究靜態控件的實際大小(以像素為單位)。 我敢打賭,它是14x14。
不,如果您將靜態控件設置為顯示圖標,則無法在設計器中調整其大小。 控件會自動調整大小以適應其顯示的圖標。 這也是設計使然。 我無法想象你為什么要這么做; 您的整個觀點似乎是您不希望剪切圖標。
但是就像我在評論中說的那樣,靜態控件不會自動縮放其圖標。 您需要編寫代碼來自行縮放圖標(可能是通過調用DrawIconEx
函數 )。 強制靜態控件自行調整大小只會裁剪圖標或在其周圍添加邊框。 如duDE建議的SS_CENTERIMAGE
,添加SS_CENTERIMAGE
樣式將更改此行為,以使圖標與靜態控件的中心對齊,從而巧妙地更改了裁剪的方式。 但是它仍然會被裁剪以適合靜態控件的大小。
不過要小心。 我行於實際有關的圖標評論質疑的整點IDI_ICON1
是, LoadIcon
函數有一些重要的限制。 即,僅設計為以SM_CXICON
和SM_CYICON
大小加載圖標(在大多數系統上為32x32)。 當您在圖標資源中僅定義了一個圖標時,它確實可以正常工作,但否則會崩潰。 那可能是拉伸的解釋。 相反,建議您使用LoadImage
函數 。 代碼相當冗長,但是功能更強大:
HICON hIcon = static_cast<HICON>(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDI_ICON1),
IMAGE_ICON,
14, /* width (x dimension) */
14, /* height (y dimension) */
LR_DEFAULTCOLOR));
// (make sure to call DestroyIcon() on hIcon when you're done with it!)
嘗試這個:
CStatic m_CStatic;
// Create a child icon static control
m_CStatic.Create(_T("my static"),
WS_CHILD|WS_VISIBLE|SS_ICON|SS_CENTERIMAGE, CRect(0 , 0, 14, 14), pParentWnd);
// Set the icon
m_CStatic.SetIcon(::LoadIcon(IDI_ICON1));
關鍵是SS_CENTERIMAGE:
位圖位於包含它的靜態控件的中心。 控件未調整大小,因此對於控件太大的位圖 將被裁剪 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.