Win32 寫視窗時,做視覺化介面大多有兩種方式,一種是直接用 IDE 所附的資源編輯器,另一種是直接用 API 下去砍。資源編輯器所編輯出來的,會產生二個檔案,一個是 hello.rc 另一為 resource.h。 resource.h 本身並沒有什麼好講的,裡面都是定義一些資源編號之 macro。
目前這兩種方式 (API、使用資源編輯器) 都可以動態資源變更之目的,但在大多之情況,用 API 撰之較費時,光是畫一份 Dialog 便要花一些時間在計算位置上,但若 UI 介面常改變時,用 API 可能是較佳維護之方式。這裡不會把所有關於 Resource 之 API 都提上,要提的是資源編輯器這塊。
用記事本開啟 *.rc 時,其實裡面都是一些簡單的 script language,而且不同之資源編輯器,對於所述之 *.rc 大多大同小異,只是一些會再加上額外區段。但目前大多數在 Windows 開發視窗程式,不少人使用了 VC / BCB 這兩套,VC 本身之 IDE 便據資源編輯器之功能,所以用 VC 開啟 *.rc 時,正常都是顯示一些 Menu、Bitmap、Icon、Dialog 之類的資源檔 (BCB 沒用過,但有間公司自稱 Borland 這堆委其開發,估 Borland 資源編輯器也是做在 IDE 裡面)。
但這份 *.rc 本身並不據任何意義,它必須還要使用另一套 resource compiler ,目前 resource compiler 在 VC 下為 RC.exe ( bcb 似乎叫 BRCC32.exe),將 *.rc compile 成 *.res,如
RC.exe hello.rc
將生成 hello.res,而要再將 hello.c 編成 hello.exe 時
CL.exe hello.c hello.res user32.lib
方可順利生成 hello.exe。
接下來便是問題所在了,這些動作如何在 gcc 底下執行?或,有免費 IDE 提供這些功能?
1. Resource Editor:有 Resource Editor ,free software,但可能要注意語言問題。
2. Resource Compiler:目前不確定有沒有 free software,但在安裝 Microsoft SDK 時,有提供 RC.exe。
3. Resource Linker : 目前也不知道在 gcc 或其他 compiler 下是否提供 .res 連結之語法。
有機會摸到時,再將 2.3 點補上。先說 gcc 常見一問題,
compile 出 WinMain 之程式,都會再有一 console 視窗,該如何解決?
有一說,將 SDK 裡之 user32.lib, gdi32.lib, kernel32.lib 改成
libuser32.a , libgui32.a, libkernel32.a,放到 C:\MinGW\lib 底下便可。
但我試的結果和這沒差,C:\MinGW\lib 本身就有 libuser32.a , libgui32.a, libkernel32.a,
(雖內容不一樣),改編譯參數
gcc.exe hello.c mwindows -o hello.exe
這樣執行檔便不會有 console 視窗。

1. gcc 的 resource compiler 名為 windres.exe,我記得是 mingw 預設安裝項目 2. mwindows 才是正解,那些 xxx.lib 只是對應 dll 的連結介面而已,和命令列視窗無關。 3. 你可能會有興趣查查 Win32++(win32xx) 這個library,另外也建議你去學一些有自動 layout 能力的 library
novus 真是太強了,從這篇文章便知 Win32++ 是我想要的東西。查過,似乎真的是 MFC/BCB 另一替代方案 (重點是 Free-ware),謝謝! 另想請教的是,「自動layout能力」指的是?
大部分的 GUI 程式庫都不會要求你針對所有元件一一指定大小、位置,通常他們都會提供一個 layout 機制,你只需要給 layout policy ,那麼所有的東西都會自動調整位置。 GUI library 很多,你可以多找找,Win32++ 大概是輕量級當中可用性最高的。即使用 resource 和純 API,把常用的東西稍微包裝成可重複使用的物件,程式碼會比較好管理,而且比 MFC 瘦很多。
novus 真是我 programming 上之良師,所給的意見查過後都讓我感到為之驚艷,再次感謝您不吝提供方針 :)