五 訊息處理機制

2022-09-13 18:06:14 字數 2169 閱讀 2995

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

handler訊息處理機制

handler主要用來更新ui 因為涉及到執行緒安全,android必須在ui執行緒 即主線程 裡才能更新ui,在其他執行緒裡更新ui會報錯,而一些耗時的操作又必須通過開啟新的執行緒來執行,這就要用到handler來傳遞訊息了。在主線程中建立乙個handler的例項,並重寫handlermessag...

非同步訊息處理機制

借鑑 為什麼不能在子執行緒更新ui?1 ui是非執行緒安全的,主線程和子執行緒同時更新ui的話會導致錯誤,如ui錯亂之類的。2 ui更新是很耗效能的,更別說為了執行緒安全加鎖了,最簡單的方法就是更新ui的操作放到乙個執行緒中,即主線程 handler機制 looper 維持乙個thread物件以及m...

Handler訊息處理機制

剛開始接觸android,邊學習邊做筆記,希望大家多指正。經常在 中看到sendmessage 族的一些函式,開始時總搞不明白訊息傳送到 去了,誰去處理,什麼時候處理。下面是問題解答。至於開始的幾個疑問,我是這樣理解的。訊息傳送出去,就相當於馬上要被處理了。就像進地鐵一樣,已經站到了進站的佇列中 假...