我們知道可以用記事本開啟.rc檔案,然後改裡面的座標,來改變對話方塊大小,如:
以下是rc檔案 ///////////////////////////////////////////////////////////////////////////// // // Dialog // IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "關於 Server" FONT 9, "MS Shell
Dlg", 0, 0, 0x1 BEGIN ICON IDR_MAINFRAME,IDC_STATIC,14,14,21,20 LTEXT "Server,1.0 版",IDC_STATIC,42,14,114,8,SS_NOPREFIX LTEXT "Copyright (C) 2010",IDC_STATIC,42,26,114,8 DEFPUSHBUTTON "確定",IDOK,113,41,50,14,WS_GROUP END 只要把“IDD_ABOUTBOX DIALOGEX 0, 0, 170,
62”最後兩個數改一下就可以改變about視窗的大小。
對話方塊資源中的尺寸數值是對話方塊單位,該大小的單位不是像素而是DLU(dialog logical
units),它是與解析度無關的座標單位。它與像素之間的轉換關係與目前的交談框字型有關。不是像素,要轉換成像素,可以藉助於 MapDialogRect 來轉換。 如果想手動計算,用下面的演算法:
pixelX = MulDiv(dialogX, 對話方塊水平基本單位, 4)
pixelY = MulDiv(dialogY, 對話方塊垂直基本單位, 8)
DialogLayout類是一個簡單的布置管理器,用來配合Win32 API中的對話方塊邏輯單位(dialog logical units = DLU)工作。對話方塊邏輯單位是與解析度無關的座標單位,它對於對話方塊中控制組件的布置很有作用。從DLU到象素有一個映射,此映射是基於對話方塊所用的字型的。DLU的一個X方向的座標單位相當於對話方塊中所用字型的平均寬度的1/4,Y方向的座標單位相當於對話方塊對話方塊所用字型高度的1/8。注意字型平均寬度的計算並非是所有字元的平均,而是字母a…z(包括大寫)的寬度的平均,換句話說,它等於字串”a…zA…Z”的長度除以52。
使用Visual Studio 6.0(Visual C++ 6.0)開發的過程中,對話方塊中的控制項在資源編輯器中的尺寸和其實際的像素尺寸之間的對應問題非常的令人煩惱。特別是在要求對話方塊控制項大小隨螢幕解析度或程式視窗大小變化而變化時就更加令人撓頭。 原因就在於,資源編輯器中的單位(DLU)與螢幕像素之間的對應關係隨著對話方塊字型種類和大小的變化而變化。(1)在水平方向1 DLU == 1/4 字型平均寬度;(2)在垂直方向1 DLU == 1/8 字型平均高度。這一對應關係由於所使用字型的多變而難以確定。在絕大多數情況下,通過上面公式所計算的DLU甚至不會是整數像素。 為了在資源編輯器編輯的過程中就比較好的把握做出來的控制項在螢幕上的像素尺寸,根據(1),思路:在對話方塊資源編輯器中應該採用等寬字型;根據(2),思路:最好採用所謂“系統”字型,這樣字型高度也是固定的。 驗證一下:在對話方塊資源編輯器中開啟“Dialog Properties”,單擊“Font...”按鈕,為對話方塊選擇字型。考察“FixedSys”和“System”兩種,首先,從網上搜尋得知,它們是等寬字型;其次,這兩種字型只有一種尺寸大小“12”,這說明字型高度是固定的。 實地測試一下,在VC對話方塊工程中,將對話方塊的字型改為“FixedSys”或“System”,字型大小大小改為“12(即小四)”,並在對話方塊中建立一個100*100 DLU的按鈕。在按鈕單擊響應函數裡,用GetWindowRect()或GetClientRect()取得按鈕尺寸。設定斷點調試觀察結果:按鈕的像素尺寸是200*200!這表明對話方塊資源編輯器中的1 DLU現在等於2 Pixels。這樣對於我們的設計就方便很多了。 如果螢幕解析度改變了,結果如何呢?在不同的顯示器上進行測試,結果都一樣,仍然是1 DLU == 2 Pixels。 還有沒有別的字型有這樣的效果呢?“Terminal”字型也可以,選擇字型大小為12,測試結果也是水平方向/垂直方向1 DLU == 2 Pixels。不過有個毛病:選擇了該字型的對話方塊在資源編輯器裡看起來怪怪的,水平方向1 DLU和垂直方向1 DLU的長度不同,好像被壓扁了一樣。但程式運行起來則沒問題。另外,選擇不同的“Terminal”字型大小,則對應關係也會改變。 到這裡,索性對其他幾種常用的字型也測試了一下,發現Verdana和宋體效果比較好(雖然對於英文來說這兩種都不是等寬字型。而對於漢字,一般使用的漢字字型都是等寬的,方塊字嘛)。下面是測試結果(仍然用100*100的按鈕來測試): 字型 / 字型大小 / 水平尺寸 / 垂直尺寸 Verdana / 8 / 175 / 163 / 9 / 200 / 175 / 10 / 200 / 200 / 11 / 225 / 225 / 12 / 250 / 225 宋體 / 8 / 150 / 138 / 9 / 150 / 150 / 10 / 175 / 163 / 11 / 200 / 188 / 12 / 200 / 200 結論1:如果對FixedSys和System字型的效果不滿意,選用12號宋體/10號Verdana是比較好的 結論2:雖然只能使用若干種有限的字型,但能給編程帶來一些方便,還是值得的(相比字型效果的損失)
轉自:http://blog.sina.com.cn/s/blog_4dd787e401017vhj.html