第1節(1 / 2)

VC 深入詳解學習筆記

Lesson1: Windows程序運行原理及程序編寫流程

窗口產生過程,句柄原理,消息隊列,回調函數,窗口關閉與應用程序退出的工作關係,使用VC 的若幹小技巧,stdcall與Lessonecl調用規範的比較,初學者常犯錯誤及注意事項。

1. Windows API與Win32 SDK

操作係統提供了各種方便開發Windows應用程序的編程接口,所的函數都在Windows。h頭文件中聲明。Win32 SDK(Software Development Kit): 即Windows 32位平台下的軟件開發包,包括API函數,幫助文檔,微軟提供的一些輔助開發工具。

2. 窗口與句柄

窗口是是屏幕上一塊矩形區域,是Windows應用程序與用戶進行交互的接口。窗口分為客戶區和非客戶區。

在Windows應用程序中,窗口是通過窗口句柄(HWND)來標識的,要對某個窗口進行操作,首先就要得到這個窗口的句柄。其它各種資源(窗口,圖標,光標等),係統在創建這些資源時會為它們分配內在,並返回標識這些資源的標識號,即句柄。-->光標句柄(HCURSOR),圖標句柄(HICON)。

3. 消息與消息隊列

Windows程序設計是一種基於消息的事件驅動方式的程序設計模式。

消息:在Windows中由結構體MSG來表示,

typedef struct tagMSG{

HWND hwnd;//消息所屬的窗口句柄

UINT message;//消息本身標識符,由一數值表示,係統對消息定//義為WM_XXX宏(WM為Windows Message縮寫)

WPARAM wParam; //隨消息的不同附加信息也不同

LPARAM lParam; //消息的附加參數

DWORD time; //消息投遞的時間

POINT pt; //鼠標當前位置

}

消息隊列:每當一個Windows應用程序創建後,係統都會為該程序創建一個消息隊列,這個消息隊列用來存放該程序一的窗口的消息,消息產生後被投遞到消息隊列中,應用程序通過一個消息循環不斷的消息隊列中取出消息進行響應。響應過程由係統向應用程序發送消息,實際就是調用應用程序的消息處理函數。

4. 創建一個完整的Win32程序,該程序實現創建一個窗口,其中主要步驟為

A. WinMain函數的定義

B. 創建一個窗口 創建一個完整的窗口的四個步驟SDK,1設計窗口類,2注冊窗口類,3創建窗口,4顯示窗口

C. 進行消息循環

D. 編寫窗口過程函數

回調函數的實現機製:

(1) 定義一個回調函數

(2) 提供函數實現的一方在初始化的時候,將回調函數的函數指針注冊給調用者

(3) 當特定的事件或條件發和的時候,調用使用函數指針調用回調函數對事件進行處理

針對Windows的消息處理機製,窗口過程函數被調用的過程如下:

A. 在設計窗口類的時候,將窗口賽程函數的地址賦值給lpfnWndProc成員變量

B. 調用RegisterClass(&wndclass)注冊窗口類,那麼係統就有了我們所編寫的窗口過程函數的地址

C. 當應用程序接收到某一窗口的消息,調用DispatchMessage(&msg)將消息加值給係統。係統則利用先前注冊窗口類時得到函數指針,調用窗口過程函數對消息進行處理。

HICON LoadIcon(HINSTANCE hInstance, LPCTSTR lpIconName);