簡體   English   中英

如何在MFC中設置對話框的默認大小(以像素為單位)

[英]How to set the default size in pixels of dialog in MFC

我想設置對話框的默認大小(以像素為單位),比如640像素寬和384像素高。 default我的意思是,當第一次CXXXDlg::OnSize(UINT nType, int cx, int cy)cx值為640, cy值為384. scene的默認大小為對話框是對話框單元,我可以使用MapDialogRect()將對話框單位轉換為像素,我該怎么做呢? MoveWindow()SetWindowPos()可以設置對話框的大小,但不能設置默認大小。 我也試過像這樣的GetDialogBaseUnits()

DWORD dw = GetDialogBaseUnits();
WORD m_duXx4 = LOWORD(dw);
WORD m_duYx8 = HIWORD(dw);
int dialogUnitX = MulDiv(640, 4, m_duXx4);
int dialogUnitY = MulDiv(384, 8, m_duYx8);

事實證明, dialogUnitX320 ,而dialogUnitY192 ,但當我將對話框單元設置為320 * 192 ,我在CXXXDlg::OnSize(UINT nType, int cx, int cy)得到的不是640 * 384但是560 * 336 有任何想法嗎?

窗口由客戶區非客戶區組成

客戶端區域是應用程序顯示輸出的窗口的一部分,例如文本或圖形。

標題欄,菜單欄,窗口菜單,最小化和最大化按鈕,大小調整邊框和滾動條統稱為窗口的非客戶區域

Window Rect指定包含整個窗口的區域。 它包括客戶區域和非客戶區域。 可以通過調用GetWindowRect (或其MFC等效項)來檢索它。 它還用作MoveWindowSetWindowPos等函數的輸入。

Client Rect是非客戶區域未占用的窗口區域。 可以通過調用GetClientRect來查詢它。 客戶端rect維度傳遞給WM_SIZE消息處理程序。

如果應用程序需要特定大小的客戶區,則可以通過調用AdjustWindowRectAdjustWindowRectEx來計算相應的窗口rect。

窗口rect通常以屏幕坐標表示,而客戶端rect使用客戶端坐標 兩個坐標系都代表設備像素。 原點位於屏幕坐標主顯示屏的左上角,客戶端坐標的客戶區左上角。 要在坐標系之間進行轉換,應用程序使用ClientToScreenScreenToClient

對話框模板在對話框模板單元中指定尺寸和位置。 對話框模板單元與對話框的字體直接相關。 要在對話框模板單元和設備像素之間進行轉換,應用程序會調用MapDialogRect 沒有API調用來計算反向。 應用程序必須手動執行計算:

width  = MulDiv(width,  4, baseunitX);
height = MulDiv(height, 8, baseunitY);

如果應用程序想要動態限制窗口大小,它可以處理WM_GETMINMAXINFO消息並使用所需的維度填充MINMAXINFO結構。 當窗口的大小或位置即將改變時,該消息被發送到窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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