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);