Windows編程基礎

來源:互聯網
上載者:User
 

1.事件驅動程式
要實現這種Windows的多任務工作方式,過程式編程方式顯然是不適合的。於是就產生了適應於這種工作方式的編程模式:事件驅動編程方式。
事件驅動程式以視窗為中心,根據使用者的不同操作啟用處理相應事件的代碼並完成相應的任務。
事件驅動的程式設計是一種“被動”式程式設計方法,程式開始運行時,處於等待使用者輸入事件狀態,然後取得事件並作出相應反應,處理完畢又返回並處於等待事件狀態。

2.訊息
訊息是報告有關事件發生的通知。
在Windows系統中,訊息是一種Windows資料結構,其中包含有訊息的名字、訊息發生時的一些參數,以及處理這個訊息的函數指標。
使用者操作——〉觸發事件——〉通過訊息的方式通知Windows系統
應用程式獲得某個訊息——〉調用訊息處理函數處理訊息
根據訊息來源的不同,訊息可分為以下4類:
(1)輸入訊息
(2)控制訊息
(3)系統訊息
(4)使用者訊息

解讀Win32應用程式
在最簡單的Win32程式中,一共有5個全域函數和3個全域變數。

1.控制代碼
控制代碼是用來唯一標示某個對象的長整數,可以簡單把控制代碼理解為指標,但實際上還不太一樣。Windows系統定義了很多控制代碼,如視窗控制代碼、裝置環境控制代碼等等,在MFC中都被封裝起來了,因此一般看不到。但還有許多MFC中的函數沿用API的習慣,使用控制代碼作為函數的參數。如果使用API編程就得經常跟控制代碼打交道了。

2.Windows程式的進入點——WinMain函數
WinMain函數主要執行了兩個動作:一是產生幾乎每個Windows程式都需要的主視窗介面;二是建立Windows程式的心臟:訊息迴圈。

分析代碼:
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
 MSG msg; //定義一個Windows的訊息結構

 // 初始化全域字串
 MyRegisterClass(hInstance);  //首先調用此函數註冊一個視窗類別

 // 執行應用程式初始化:
 if (!InitInstance (hInstance, nCmdShow)) //在此函數中,就產生了主視窗介面。
 {
  return FALSE;  //如果產生主視窗不成功,程式直接返回,退出
 }

 //以上是WinMain()函數的第一項工作:產生主視窗。
 //下面是WinMain()函數的第二項工作:建立主訊息迴圈。
 //下面這個迴圈就是Windows程式的心臟:主訊息迴圈。一旦退出主訊息迴圈,程式就結束了。

 // 主訊息迴圈:
 while (GetMessage(&msg, NULL, 0, 0)) //使用GetMessage函數從訊息佇列中擷取訊息;
 {
  if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) //解釋加速鍵
  {
   TranslateMessage(&msg); //使用TranslateMessage函數解釋訊息;
   DispatchMessage(&msg); //發送訊息到主視窗函數中去。
  }
 }
 //退出訊息迴圈,WinMain函數才返回,程式才結束。
 return (int) msg.wParam;
}

3.訊息佇列
訊息佇列是系統用來存放各種訊息的地方,Windows作業系統有一個訊息佇列,各個應用程式也有自己的訊息佇列。上面的GetMessage函數就是從這兩個訊息佇列中擷取訊息,當擷取到了一個退出訊息的時候,訊息迴圈就終止了,程式也就相應的結束了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.