windows訊息相關

2021-07-04 13:16:56 字數 1127 閱讀 3064

1.sendmessage返回值不能直接返回訊息函式的返回值

解決方法:在訊息對應返回之前呼叫setwindowlong(hdlg, dwl_msgresult, iret);

2、sendmessage與postmessage的區別:

先來看看send與post這兩個英文單詞的意思:send有傳送的意思,而post具有投寄的意思。

聯想一下現實生活中我們寫信(很久很久以前。。。。)來記就很簡單了:

send:  相當於郵寄員,他會將快件親手交給收件人,並且需要收件人簽字,他才閃人。而在訊息機制中,就是說,系統(郵寄員)會將收到的訊息(郵局分發)直接傳送到某個視窗的視窗過程(收件人),並且需要該視窗作出處理(收件人簽字)才返回。 這東東就是sendmessage

post:  相當於郵局、郵筒等等,我們寫好信好,會將信交給郵局,或投寄到郵筒裡,而什麼時候傳送,傳送到**都由郵局來處理,我們投寄信件的時候,是不會等候這封信件到達收件人手裡,然後才回家的。 而在訊息機制中,就是說,系統(我們)將收到的訊息(信件)投寄到應用程式的訊息迴圈(相當於郵筒)中,然後就閃人,具體啥時候處理這條訊息(啥時候傳送郵件),那就得看「辦事效率」了。

區別很明顯,sendmessage的訊息是不進佇列的,而postmessage的需要排隊。 

但,值得說明的是:雖然乙個要進隊,乙個不進隊,但是最終處理訊息的地方都一樣:都是系統呼叫視窗過程進行處理(收件人作出反應)

類似的,還有一對函式 peekmessage和getmessage~~~~

3、pretranslatemessage

我們可以pretranslatemessage來對訊息預處理,該用的用,不該用的不用。那麼,是否send和post來的訊息我們都可以用它來預處理呢?

答案當然是否定的:如果你在深圳,要寫封信寄到東北去,那麼投寄方式有兩種:1、自己帶著信跑到東北去,2、將信放到郵局,由郵局分發。

第1 種情況下,就是sendmessage了,這個時候,還有誰能預處理你的信呢?

第2種情況下,就是postmessage了,這個時候,嘿嘿,萬一運氣不好,被郵局給用pretranslatemessage給截了.....

所以說,用sendmessage傳送的訊息是不能用pretranslatemessage來預處理的。而post的就可以,因為它要經過「第三者」嘛。

Windows控制代碼,訊息

常用控制代碼型別及說明 控制代碼型別 說明 hwnd 標識視窗控制代碼 hinstance 標識當前例項控制代碼 hcursor 標識游標控制代碼 hfont 標識字型控制代碼 hpen 標識畫筆控制代碼 hbrush 畫刷 hdc 裝置環境 hbitmap 位圖 hicon 圖示 hmenu 選單...

Windows訊息大全

windows是一訊息 message 驅動式系統,windows訊息提供了應用程式與應用程式之間 應用程式與windows系統之間進行通訊的手段。應用程式要實現的功能由訊息來觸發,並 對訊息的響應和處理來完成。windows系統中有兩種訊息佇列,一種是系統訊息佇列,另一種是應用程式訊息佇列。計算機...

windows訊息機制

一 windows中有乙個系統訊息佇列,對於每乙個正在執行的windows應用程式,系統為其建立乙個 訊息佇列 即應用程式佇列,用來存放該程式可能 建立的各種視窗的訊息。應用程式中含有一段稱作 訊息迴圈 的 用來從訊息佇列中檢索這些訊息並把它們分發到相應的視窗函式中。二 windows為當前執行的每...