查看單個文章
舊 2006-05-18, 07:29 PM   #2 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

四、消息循環

  系統會將針對這個程序的消息依次放到程序的「消息貯列」中,由程序自己依次取出消息,在分發到對應的視窗中去。因此,建立視窗後,將進入一個循環。

  在循環中,取出消息、派發消息,循環往復,直到取得的消息是結束消息。

  循環結束後,程序即結束。

#include "stdafx.h"
#include <windows.h>

//一、消息處理函數
//參數:視窗關鍵句,消息,消息參數,消息參數
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 //處理感興趣的消息
 switch (message)
 {
  case WM_DESTROY:
   //當用戶關閉視窗,視窗銷毀,程序需結束,發結束消息,以結束消息循環
   PostQuitMessage (0) ;
   return 0 ;
 }
 //其他消息交給由系統提供的預設處理函數
 return :efWindowProc (hwnd, message, wParam, lParam) ;
}

//二、應用程式主函數
//參數:實例關鍵句、前一個實例的關鍵句、指令行參數、視窗顯示方式
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
 //1.註冊視窗類
 static TCHAR szAppName[] = TEXT ("HelloWin") ; //視窗類名稱
 //設定"視窗類"結構
 WNDCLASS wndclass ;
 wndclass.style = CS_HREDRAW | CS_VREDRAW ;
 wndclass.lpfnWndProc = WndProc ; //關聯消息處理函數
 wndclass.cbClsExtra = 0 ;
 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 ("RegisterClass Fail!"),
  szAppName, MB_ICONERROR) ;
  return 0 ;
 }

 //建立視窗
 HWND hwnd ;
 hwnd = CreateWindow (szAppName, //視窗類名稱
 TEXT ("The Hello Program"), //視窗標題
 WS_OVERLAPPEDWINDOW, //視窗風格
 CW_USEDEFAULT,
 CW_USEDEFAULT,
 CW_USEDEFAULT,
 CW_USEDEFAULT,
 NULL,
 NULL,
 hInstance, //實例關鍵句
 NULL);

 ShowWindow (hwnd, iCmdShow) ;
 UpdateWindow (hwnd) ;

 //消息循環
 MSG msg ;
 while (GetMessage (&msg, NULL, 0, 0)) //從消息貯列中取消息
 {
  TranslateMessage (&msg) ; //轉換消息
  DispatchMessage (&msg) ; //派發消息
 }
 return msg.wParam ;
}
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次