簡體   English   中英

MFC如何將CStatic調整為小尺寸

[英]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_CXICONSM_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM