十四、winmain函式
14.1、函式原型:
intapientry 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 structtagmsg 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 族的一些函式,開始時總搞不明白訊息傳送到 去了,誰去處理,什麼時候處理。下面是問題解答。至於開始的幾個疑問,我是這樣理解的。訊息傳送出去,就相當於馬上要被處理了。就像進地鐵一樣,已經站到了進站的佇列中 假...