2013-03-10 70 views
1

我有以下問題與靜態控件控制:MFC如何調整靜態控件爲小尺寸

當我打電話功能SetIcon

m_CStatic.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1)); 

它加載有一個尺寸14×14像素的圖標,但控件的實際大小變成21x20,我不能修改它。

我試着撥打:

m_CStatic.SetWindowPos(NULL,0 , 0, 14, 14, SWP_NOMOVE); 

但只削減大小沒有圖標的大小調整。結果我有一部分放大的圖像。

有什麼方法可以設置圖標的大小加載?

EDIT

IDI_ICON1的實際尺寸是14×14 像素。

此外CStatic控件的大小是21x20我不能用設計器來改變它。

當我加載一個圖標時,它被拉伸。我不知道爲什麼。

+0

「IDI_ICON1」中實際圖標資源的大小是多少?它是否包含多個圖標大小?當你說「控件的實際大小變成21x21」時,你的意思是14x14像素圖標被拉伸到21x21像素?或者,控件是否只在邊界附近添加了填充?無論如何,請注意,當您更改大小時,靜態控件不會調整其圖標大小。它不會縮放,只會剪裁。你必須自己做圖像處理。 – 2013-03-10 11:50:28

回答

1

IDI_ICON1的實際尺寸是14x14像素。

此外CStatic控件的大小是21x20,我無法用設計器來改變它。

如果您正在尋找設計師的控件大小,那麼您並沒有在這裏比較蘋果和蘋果。設計者正在報告DLUs(對話框單元)中的控件大小,而不是像素

DLU和像素之間不一定是1對1映射。實際上,DLU的重點在於它與像素無關。由單個DLU表示的實際像素數將根據您運行應用程序的計算機的字體和DPI而發生變化。

因此,您所看到的行爲對我來說非常有意義。

如果您不相信這個DLUs與像素的傻瓜,那麼請嘗試在調試器下運行該應用程序並使用Spy ++調查靜態控件的實際大小(以像素爲單位)。我敢打賭它是14x14。

並且不,如果您將其設置爲顯示圖標,則無法在設計器中調整靜態控件的大小。該控件的大小自動調整以適應正在顯示的圖標。這也是設計。我無法想象你爲什麼想要;你的整個觀點似乎是你不希望圖標被剪輯。

但正如我在評論中所說,靜態控件不會自動縮放它們的圖標。你需要編寫代碼來自己完成圖標縮放(可能通過調用DrawIconEx function)。強制靜態控件調整大小本身只會裁剪圖標或在其周圍添加邊框。添加SS_CENTERIMAGE風格,因爲duDE suggested將改變這種行爲,以便圖標與靜態控件的中心對齊,微妙地改變裁剪的方​​式。但它仍會裁剪以適應靜態控件的大小。

不過要小心。在關於圖標實際上在IDI_ICON1的評論中,我的提問線的整個觀點是LoadIcon函數有一些重要的限制。也就是說,它僅用於加載尺寸爲SM_CXICONSM_CYICON的圖標(在大多數系統上,這將是32x32)。如果在圖標資源中只定義了一個圖標,它會按預期工作,否則它會分崩離析。這可能是拉伸的解釋。相反,建議您使用LoadImage function。代碼相當詳細,但功能更強大:

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!) 
0

嘗試這種情況:

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:

位圖是在包含它的靜態控制居中。 該控件沒有調整大小,所以位圖太大,控件將被剪裁

+0

當我使用'SS_CENTERIMAGE'作爲初始控件時,它裁剪了一個圖標。但我仍然不明白爲什麼它調整負載上的圖標。 – Alex 2013-03-10 11:44:49