當前位置:
首頁 > 知識 > 五、消息處理機制

五、消息處理機制

十四、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、控制項通知消息:比如按鈕。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

admin 後台美化處理 JSONField

TAG:達人科技 |

您可能感興趣

虛擬機性能監控和故障處理工具
處理情緒和處理衝突
催眠能治療和處理心理問題的原理
員工被傳銷組織控制,能否按曠工處理?
混凝土裂縫常用處理辦法
合金裝備倖存防止食物腐壞處理方法
性能監控和故障處理
廢水處理系統的改造經驗
C預處理器指令
談家裝布局規劃與細節處理
深交所:嚴厲打擊、堅決處理環保信披違規行為
無葯高效物理水處理+電磁除垢系統簡介
殭屍毀滅工程人物各狀態及處理方法
投資的邏輯之預處理器
社群危機處理:這三3情況保你高效處理社群危機,尤其最後一條
油田廢水常用處理技術匯總
腿部紅血絲的處理辦法_秦婉護膚
政策推進綠色發展價格機制形成,關注污水處理
肺結節的正規處理流程
真·入門機 魅藍新機或採用展訊處理器