2015-04-02 65 views
1

我使用win32在原始C中編碼。在對話框基本單位和像素之間轉換

我想在運行時更改控件(按鈕)的位置,以正確保持其父對話框中的相對位置,該對象的大小可調整。 我通過資源腳本定義了對話框和按鈕,其中尺寸位於對話框基本單位中。

要在運行時更改大小,我必須處理SetWindowPos函數,它接受以像素爲單位的值,以便保持原始比例,我需要以像素爲單位將原始距離(以對話框基本單位)轉換。

我試過使用從GetDialogBaseUnits函數返回的值,並遵循使用MulDiv函數在參考頁面中報告的「轉換過程」(實質上是乘法和除法),但我得到是一個錯誤的值... 特別是我獲得:LOWORD(GetDialogBaseUnits())= 8和HIWORD(GetDialogBaseUnits())= 16,它用於MulDiv,在對話框基本單位中產生的大小正好是像素的一半(這在我的系統中是錯誤的)。

如何正確執行此轉換?

+0

只需獲取WM_INITDIALOG中的實際位置並保存起始比率。在調整大小的時候使用它來將所有內容保持在相同的相對位置。 – HerrJoebob 2015-04-02 16:45:48

回答

0

Not with GetDialogBaseUnits().

如果你有一個對話框,你可以很容易地做到這一點:使用MapDialogRect() function

如果您有一個常規窗口,則必須手動進行計算。我已經提出了一個與其相關的問題here並且寫了a tool來測試可能的計算。不同的計算結果足夠接近,同樣在視覺上有用;不要太緊張。

相關問題