1 /*
2 最簡單的Windows應用程式
3 如你所想,這是最簡單的Windows應用程式,僅僅啟動一個表單,但是它具備了最大化,最小化,視窗縮放,關閉等準系統。
4 此為標準的Windows應用程式,我們可以在此基礎上進行擴充,實現更複雜的應用,如添加新控制項、菜單,多表單甚至繪圖等。
5
6 Windows程式都要註冊視窗類別(10個參數,包含視窗處理常式);然後CreateWindow,ShowWindow,UpdateWindow實現視窗
7 的建立,顯示及更新;然後啟用訊息迴圈(傳輸,分發);注意訊息處理函數,必須處理WM_DESTROY訊息。
8 關於Windows的訊息處理機制,侯捷《深入淺出MFC》一書也有詳細的介紹,可以參考。
9
10 程式來自《Programming Windows》,作者Chales Petzold,此程式只是備忘。 2010-07-18 Phoenix @home
11 */
12 #include <Windows.h>
13
14 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
15 {
16 switch (message)
17 {
18 case WM_DESTROY:
19 PostQuitMessage(0);
20 return 0;
21 }
22 return DefWindowProc(hwnd,message,wParam,lParam);
23 }
24
25 int __stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
26 {
27 TCHAR szAppName[] = L"SimpleWindow";
28 MSG msg;
29 HWND hwndMain;
30 WNDCLASS wndclass;
31
32 //wndclass 結構共有10個成員,必須要全部設定才能註冊成功
33 wndclass.lpszClassName = szAppName;
34 wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
35 wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
36 wndclass.lpfnWndProc = WndProc; //指定視窗的訊息處理過程
37 wndclass.hInstance = hInstance;
38 wndclass.cbClsExtra = 0;
39 wndclass.cbWndExtra = 0;
40 wndclass.style = CS_HREDRAW | CS_VREDRAW;
41 wndclass.lpszMenuName = NULL;
42 wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
43
44 if (!RegisterClass(&wndclass)) //註冊視窗類別
45 {
46 MessageBox(NULL,TEXT("This Program requires Windows NT."),TEXT("Windows NT Required"),MB_ICONSTOP);
47 return 0;
48 }
49
50 //CreateWindow,ShowWindow,UpdateWindow:建立視窗,顯示並更新視窗視圖
51 hwndMain = CreateWindow(szAppName,TEXT("The Simple Windows Application"), WS_OVERLAPPEDWINDOW,
52 CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
53 NULL, NULL,hInstance, NULL);
54 ShowWindow(hwndMain,nShowCmd);
55 UpdateWindow(hwndMain);
56
57 //Message Loop:啟動訊息迴圈
58 while(GetMessage(&msg,NULL,0,0))
59 {
60 TranslateMessage(&msg);
61 DispatchMessage(&msg);
62 }
63
64 return msg.wParam ;
65 }