五、消息處理機制
十四、winMain函數
14.1、函數原型:
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
14.2、函數名前面的w說明是寬字元,當然存在寬字元那就會有與之對應的窄字元版本,
14.3、窄字元版本下唯一不同的是第三個參數,沒有W。
14.4、APIENTRY(一種調用約定):
14.4.1、#define APIENTRY WINAPI
14.4.2、#define WINAPI __stdcall
14.4.3、__stdcall:實際上是一種調用約定
14.4.4、調用約定:
14.4.4.1、在函數中將調用約定去掉也是可以正常的運行這個函數的,因為已經存在默認。
14.4.4.1、那麼調用約定有什麼作用呢:
14.4.4.1.1、首先我們進行函數參數傳遞的時候都是通過棧進行的參數的傳遞。
14.4.4.1.2、當函數結束的時候棧幀將會被清理(平棧)。
14.4.4.1.3、__stdcall:指的是調用方進行清理。
14.4.4.1.4、__cdecl:由被調用方進行清理。
14.4.4.1.5、__fastcall:指的是不通過棧進行參數的傳遞,而是通過寄存器來進行參數的傳遞。
14.4.4.1.6、在C編譯中使用的都是__cdecl,而在win32中全部用的都是__stdcall。
14.5、HINSTANCE:和之前講的HANDLE 是一樣的,同樣是來表示一個內核對象、但是這個我們稱之為一個實例對象。
14.6、我們可以像操作HANDLE 一樣來進行HINSTANCE 對進程進行操作。
14.7、實例對象:指的是一個進程,
14.8、第一個參數hInstance是當前實例的實例句柄。
14.9、第二個參數hPrevInstance是父進程的實例句柄。
14.10、為什麼需要由外部傳遞當前的實例句柄呢?
14.10.1、其實我們寫的程序之所以能成為一個進程:是因為有操作系統的存在。
14.10.2、其實呢,winMain是一個被動調用的程序,而本身是不能自己進行進程的創建的,必須要由操作系統來進行進程的創建。
14.10.3、既然是由操作系統來創建這個進程的,所以本身程序是不知道這個進程編號的。
14.10.4、所以只能由外部來告知程序,你當前進程的ID是多少。
14.11、lpCmdLine:程序命令行。
14.12、nCmdShow:首先winMain所代表的是一個窗口進程,這個參數是指定這個窗口是如何來進行顯示的。
14.13、通過CreateWindowW函數創建了一個窗口,返回一個窗口對象,以後要對窗口進行操作都是對這個窗口對象進行。
十五、窗口過程:
15.1、在win32的子系統中進行了所有消息的響應。
15.2、當硬體有任何的改變(比如滑鼠點擊),都會存儲在一個共享區,這個區會被win32子系統不停的進行掃描。
15.3、win32子系統會把這種改變翻譯成消息。
15.4、這個翻譯成消息的過程之所以不放在內核中來進行:是因為內核需要非常的精簡的(越簡單越好),這會佔用內核太多的資源。
15.5、在win32子系統為每個應用程序建立消息隊列。
15.6、win32子系統所派發下來的消息一定是本程序的消息。
15.7、
typedef struct tagMSG {
HWND hwnd; //在進來的時候就交代了窗口。
UINT message; //消息數值化,數值類型。
WPARAM wParam; //只有一個message的話,有時候不能來進行判斷,該消息想要做什麼。
LPARAM lParam; //這兩個是消息附加信息,而這兩個附加值的意義由message來決定。所以三個值加在一起,將會告知該消息將會做什麼。
DWORD time; //消息創建的時間。用來判斷消息處理前後。
POINT pt; //當前消息創建時,滑鼠所在屏幕的位置。
#ifdef _MAC
DWORD lPrivate;
#endif
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;
15.7.1、WPARAM和LPARAM:就是UINT類型,傳進來一般是指針數值。
15.7.2、有了這個結構體之後呢,程序會一直的去GetMessage。
15.7.3、所有的消息都存在當前軟體的消息隊列中,所有必須使用GetMessage函數進行消息的獲取。
十六、消息
16.1、WM:表示的是Windows Message。
16.2、窗口消息:針對窗口來說的(比如窗口的移動),就是有關窗口的所有消息,創建窗口CreateWindow函數的調用也是。
16.3、命令消息。
16.4、控制項通知消息:比如按鈕。
TAG:達人科技 |
※虛擬機性能監控和故障處理工具
※處理情緒和處理衝突
※催眠能治療和處理心理問題的原理
※員工被傳銷組織控制,能否按曠工處理?
※混凝土裂縫常用處理辦法
※合金裝備倖存防止食物腐壞處理方法
※性能監控和故障處理
※廢水處理系統的改造經驗
※C預處理器指令
※談家裝布局規劃與細節處理
※深交所:嚴厲打擊、堅決處理環保信披違規行為
※無葯高效物理水處理+電磁除垢系統簡介
※殭屍毀滅工程人物各狀態及處理方法
※投資的邏輯之預處理器
※社群危機處理:這三3情況保你高效處理社群危機,尤其最後一條
※油田廢水常用處理技術匯總
※腿部紅血絲的處理辦法_秦婉護膚
※政策推進綠色發展價格機制形成,關注污水處理
※肺結節的正規處理流程
※真·入門機 魅藍新機或採用展訊處理器