2010-11-02 53 views
2

我想知道我應該如何處理WinAPI/MFC下的GUI佈局。UI佈局噩夢與WinAPI

在理想的世界中,我應該通過資源編輯器創建窗體/對話框,一切都應該正常工作。在現實世界中,對話編輯器是冰河時代的古老巨獸,並不支持大多數comctl32控件。

這是問題蔓延的地方。對話框編輯器使用DLU單元,當我在運行時創建新的控件時,我必須用像素偏移量來表示它們。

我偶然發現了一篇關於根據字體http://support.microsoft.com/kb/145994/en-us計算DLU的文章,但也發現了一些警告,在某些情況下對話框可能有非系統字體,所以這種方法不是很安全。此外,文章似乎只看英文字符,而不考慮unicode空間中可能更寬的所有其他字符?

有沒有人在這方面做過研究並找到了更好的方法?

P.S .: No Winforms/WPF/Delphi,要求。

回答

2

對話框編輯器是從冰河時代古巨獸,並且不支持大部分COMCTL32的控制

它並不需要直接支持的控件,你仍然可以使用它,通過將其作爲自定義控件插入並填充屬性頁面中的窗口類來進行定位。例如,這就是我在VS2005中插入鏈接控件的方式:作爲類「SysLink」的自定義控件。

+0

嗯,我是怎麼錯過的呢,所有的文章看起來也不一樣,但是我之前沒有見過這種方法,謝謝! – Coder 2010-11-02 23:12:01

2

MapDialogRect(本文中提到)是Windows用來將對話框資源中的對話框單位轉換爲像素單位的功能。 MapDialogRect工作(GetDlgBaseUnits失敗),因爲它給出了對話框的實際句柄,並且可以發送一個WM_GETFONT消息來檢索對話框將被渲染的實際字體。