windows應用程式是通過訊息驅動的,在mfc軟體開發時,進行介面操作經常要用到訊息,通過訊息對應的處理函式來實現響應的操作。比如,使用者操作視窗,就會產生訊息,送給對應的訊息處理函式進行處理,對使用者的操作做出一些反應。
mfc使用訊息對映機制來處理訊息,具體表現就是訊息和訊息處理函式一一對應的訊息對映表,以及訊息處理函式的宣告和是實現。當視窗收到訊息時,會在訊息對映表中尋找對應的處理函式,然後由訊息處理函式做出相應的處理。
mfc無法通過類嚮導自定義訊息,所以需要手動進行新增,主要過程如下:
#define wm_my_message (wm_user+100)
afx_msg lresult onglobalregisterreadrspmsg(wparam wparam, lparam lparam);
begin_message_map()
on_message(wm_my_message, &my_class::onglobalregisterreadrspmsg)
end_message_map()
::postmessage(m_hwnd, wm_my_message, wparam , lparam);
lresult sendmessage (hwnd hwnd, uint msg, wparam wparam, lparam lparam );
bool postmessage(hwnd hwnd, uint msg, wparam wparam, lparam lparam);
這兩個引數指定了與訊息有關的附加資訊,是windows訊息機制的兩個重要引數,整個windows依靠這兩個引數傳遞各種各樣的訊息。
postmessage是非同步的,sendmessage是同步的。postmessage 只把訊息放入佇列,不管訊息是否被處理就返回,訊息可能不被處理;而 sendmessage 等待訊息被處理完了之後才返回,如果訊息不被處理,傳送訊息的執行緒將一直被阻塞。也就是說,sendmessage傳送訊息不經過訊息佇列,會被直接處理,但是sendmessage會一直等待,直到訊息被處理才會返回
都可以向程序內視窗傳送訊息,也可以向程序外視窗傳送訊息。
MFC訊息機制
一 訊息的分類 1 佇列訊息 非佇列訊息 l佇列訊息 windows 為每個應用程式都建立乙個訊息佇列,那麼通過訊息佇列,進行傳送的訊息都屬於佇列訊息 一般來說,由滑鼠 鍵盤產生的訊息都屬於佇列訊息。為什麼呢?想想,滑鼠 鍵盤事件都是由系統捕獲的,系統捕獲後要傳遞給應用程式,就一定的通過訊息佇列 l...
MFC訊息對映機制
一 mfc中採用的這種訊息處理機制成為 mfc訊息對映機制 乙個mfc訊息響應函式在程式中有三處相關資訊 函式原型,函式實現,關聯訊息和訊息響應函式的巨集。函式原型 標頭檔案cdrawview 兩個afx msg注釋巨集之間 訊息響應函式原型的宣告 afx msg void onlbuttondow...
MFC訊息對映機制
win32的訊息迴圈機制是 產生的訊息交由作業系統,將其放到應用程式的訊息佇列中。應用程式通過getmessage函式從這個佇列中取出 一條訊息 由dispatchmessage函式把訊息又交給作業系統,作業系統呼叫視窗過程函式wndproc進行處理。該函式利用switch case結構來判斷並響應...