參考資訊:
http://www.winprog.org/tutorial/
http://winapi.freetechsecrets.com/win32/
https://github.com/gammasoft71/Examples_Win32
http://masm32.com/board/index.php?topic=3584.0
https://learn.microsoft.com/en-us/windows/win32/winmsg/window-styles
Windows的視窗可以分成:Dialog、Single Document Interface(SDI)、Multiple Document Interface(MDI)三種類別,相對於SDI、MDI,Dialog類別是比較容易上手學習的一個類別,相當適合初次學習Windows視窗設計的使用者,而Windows視窗程式設計的核心就是圍繞着事件處理(處理Message),任何的視窗設定或者溝通都是以事件導向為原則,因此,寫出一個簡單的視窗框架,將有助於了解Windows視窗程式的運作
main.c
#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { CreateWindow(WC_DIALOG, "main", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 300, 300, NULL, NULL, NULL, NULL); MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { DispatchMessage(&msg); } ExitProcess(0); return 0; }
Line 5~6:在建立Windows視窗時,需要指定對應的Class,如:Edit、Button,除了可以使用系統預設的Class之外,也可以註冊自定義的Class,上面例子使用的WC_DIALOG,就是系統預設定義的Dialog Class,WS_OVERLAPPEDWINDOW代表視窗有標題、最大化、最小化的按鈕,WS_VISIBLE是建立一個可視化的視窗
Line 9:從Queue提取Message(包含視窗、系統事件)
Line 10:分發Message到處理視窗事件的副程式,由於目前的Dialog視窗並沒有對應的處理副程式,因此,無法處理任何Message,包含關閉視窗的Message,所以必須使用kill命令強制關閉該視窗
編譯、執行
$ winegcc main.c -o main $ wine ./main.exe