Windows程序設計----Windows程序基本結構

 

  1. /*------------------------------------------------------------ 
  2.    HELLOWIN.C -- Displays "Hello, Windows 7!" in client area 
  3.                  (c) Charles Petzold, 2013 
  4.   ------------------------------------------------------------*/ 
  5.  
  6. #include <windows.h> 
  7.   
  8. LRESULT CALLBACK WndProc (HWNDUINTWPARAMLPARAM) ; 
  9.  
  10. int WINAPI WinMain (HINSTANCE hInstance,        //標識這個程序的實例句柄 
  11.                     HINSTANCE hPrevInstance,    //32位程序中值爲NULL 
  12.                     PSTR szCmdLine,             //用來運行程序的命令行 
  13.                     int iCmdShow)               //用來指明程序最初如何顯示-正常顯示-最大化-最小化 
  14.      static TCHAR szAppName[] = TEXT ("HelloWin") ; 
  15.      HWND         hwnd ;        //窗口句柄 
  16.      MSG          msg ;         //消息結構 
  17.      WNDCLASS     wndclass ;    //窗口類結構 
  18.  
  19.      wndclass.style         = CS_HREDRAW | CS_VREDRAW ;             //類風格 
  20.      wndclass.lpfnWndProc   = WndProc ;                             //窗口過程函數 
  21.      wndclass.cbClsExtra    = 0 ;       //用於在類結構和Windows內部維護 
  22.      wndclass.cbWndExtra    = 0 ;       //的窗口結構中預留一些額外的空間 
  23.      wndclass.hInstance     = hInstance ;                           //實例句柄 
  24.      wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;    //設定窗口圖標 
  25.      wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;        //設定鼠標指針 
  26.      wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//指定客戶區背景色 
  27.      wndclass.lpszMenuName  = NULL ;        //指定窗口類菜單 
  28.      wndclass.lpszClassName = szAppName ;   //設定窗口類名稱 
  29.  
  30.      if (!RegisterClass (&wndclass))//註冊窗口類 
  31.      { 
  32.           MessageBox (NULL, TEXT ("This program requires Windows NT!"),  
  33.                       szAppName, MB_ICONERROR) ; 
  34.           return 0 ; 
  35.      } 
  36.       
  37.      hwnd = CreateWindow (szAppName,                  // 窗口類名稱 
  38.                           TEXT ("The Hello Program"), // 窗口標題 
  39.                           WS_OVERLAPPEDWINDOW,        // 窗口風格 
  40.                           CW_USEDEFAULT,              // 初始x座標 
  41.                           CW_USEDEFAULT,              // 初始y座標 
  42.                           CW_USEDEFAULT,              // 初始x方向尺寸 
  43.                           CW_USEDEFAULT,              // 初始y方向尺寸 
  44.                           NULL,                       // 父窗口句柄 
  45.                           NULL,                       // 窗口菜單句柄 
  46.                           hInstance,                  // 程序實例句柄 
  47.                           NULL) ;                     // 創建參數 
  48.       
  49.      ShowWindow (hwnd, iCmdShow) ;  //顯示窗口 
  50.      UpdateWindow (hwnd) ;          //使客戶區重繪 
  51.       
  52.      while (GetMessage (&msg, NULL, 0, 0))  //消息循環,收到WM_QUIT消息時GetMessage返回0 
  53.      { 
  54.           TranslateMessage (&msg) ; //將msg結構返還給Windows以進行某些消息的轉換 
  55.           DispatchMessage (&msg) ;  //將msg結構返回給Windows 
  56.      } 
  57.      return msg.wParam ; 
  58.  
  59. LRESULT CALLBACK WndProc (HWND hwnd,        // 
  60.                           UINT message,     //這四個參數對應MSG結構的前4個字段 
  61.                           WPARAM wParam,    // 
  62.                           LPARAM lParam)    // 
  63.      HDC         hdc ;  //設備環境句柄 
  64.      PAINTSTRUCT ps ; 
  65.      RECT        rect ; 
  66.       
  67.      switch (message)   //選擇消息進行處理 
  68.      { 
  69.      case WM_CREATE:    //調用CreateWindow時產生 
  70.           PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ; 
  71.           return 0 ; 
  72.            
  73.      case WM_PAINT:     //當客戶區部分或全部無效,必須重繪時產生 
  74.           hdc = BeginPaint (hwnd, &ps) ; 
  75.            
  76.           GetClientRect (hwnd, &rect) ; 
  77.            
  78.           DrawText (hdc, TEXT ("Hello, Windows 7!"), -1, &rect, 
  79.                     DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; 
  80.            
  81.           EndPaint (hwnd, &ps) ; 
  82.           return 0 ; 
  83.            
  84.      case WM_DESTROY:   //單擊關閉按鈕時產生 
  85.           PostQuitMessage (0) ;     //將一個WM_QUIT消息插入到消息隊列中 
  86.           return 0 ; 
  87.      } 
  88.      return DefWindowProc (hwnd, message, wParam, lParam) ; 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章