- /*------------------------------------------------------------
- HELLOWIN.C -- Displays "Hello, Windows 7!" in client area
- (c) Charles Petzold, 2013
- ------------------------------------------------------------*/
- #include <windows.h>
- LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
- int WINAPI WinMain (HINSTANCE hInstance, //標識這個程序的實例句柄
- HINSTANCE hPrevInstance, //32位程序中值爲NULL
- PSTR szCmdLine, //用來運行程序的命令行
- int iCmdShow) //用來指明程序最初如何顯示-正常顯示-最大化-最小化
- {
- static TCHAR szAppName[] = TEXT ("HelloWin") ;
- HWND hwnd ; //窗口句柄
- MSG msg ; //消息結構
- WNDCLASS wndclass ; //窗口類結構
- wndclass.style = CS_HREDRAW | CS_VREDRAW ; //類風格
- wndclass.lpfnWndProc = WndProc ; //窗口過程函數
- wndclass.cbClsExtra = 0 ; //用於在類結構和Windows內部維護
- wndclass.cbWndExtra = 0 ; //的窗口結構中預留一些額外的空間
- wndclass.hInstance = hInstance ; //實例句柄
- wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; //設定窗口圖標
- wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; //設定鼠標指針
- wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//指定客戶區背景色
- wndclass.lpszMenuName = NULL ; //指定窗口類菜單
- wndclass.lpszClassName = szAppName ; //設定窗口類名稱
- if (!RegisterClass (&wndclass))//註冊窗口類
- {
- MessageBox (NULL, TEXT ("This program requires Windows NT!"),
- szAppName, MB_ICONERROR) ;
- return 0 ;
- }
- hwnd = CreateWindow (szAppName, // 窗口類名稱
- TEXT ("The Hello Program"), // 窗口標題
- WS_OVERLAPPEDWINDOW, // 窗口風格
- CW_USEDEFAULT, // 初始x座標
- CW_USEDEFAULT, // 初始y座標
- CW_USEDEFAULT, // 初始x方向尺寸
- CW_USEDEFAULT, // 初始y方向尺寸
- NULL, // 父窗口句柄
- NULL, // 窗口菜單句柄
- hInstance, // 程序實例句柄
- NULL) ; // 創建參數
- ShowWindow (hwnd, iCmdShow) ; //顯示窗口
- UpdateWindow (hwnd) ; //使客戶區重繪
- while (GetMessage (&msg, NULL, 0, 0)) //消息循環,收到WM_QUIT消息時GetMessage返回0
- {
- TranslateMessage (&msg) ; //將msg結構返還給Windows以進行某些消息的轉換
- DispatchMessage (&msg) ; //將msg結構返回給Windows
- }
- return msg.wParam ;
- }
- LRESULT CALLBACK WndProc (HWND hwnd, //
- UINT message, //這四個參數對應MSG結構的前4個字段
- WPARAM wParam, //
- LPARAM lParam) //
- {
- HDC hdc ; //設備環境句柄
- PAINTSTRUCT ps ;
- RECT rect ;
- switch (message) //選擇消息進行處理
- {
- case WM_CREATE: //調用CreateWindow時產生
- PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
- return 0 ;
- case WM_PAINT: //當客戶區部分或全部無效,必須重繪時產生
- hdc = BeginPaint (hwnd, &ps) ;
- GetClientRect (hwnd, &rect) ;
- DrawText (hdc, TEXT ("Hello, Windows 7!"), -1, &rect,
- DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
- EndPaint (hwnd, &ps) ;
- return 0 ;
- case WM_DESTROY: //單擊關閉按鈕時產生
- PostQuitMessage (0) ; //將一個WM_QUIT消息插入到消息隊列中
- return 0 ;
- }
- return DefWindowProc (hwnd, message, wParam, lParam) ;
- }