今天跟蹤一下SendMessage的實現。
用向導先創建一個Windows application。
向導生成了一個簡單的窗口,如下。
在File菜單添加SendMessage,順便添加一個PostMessage,點擊菜單打開關於對話框,加入已下代碼。
用WinDbg調試,點擊SendMessage,程序斷在IDM_ABOUT的時候查看堆棧。
原來SendMessage是通過內部調用SendMessageWorker通過InternalCallWinProc直接調用的WndProc!!
跟蹤到調用InternalCallWinProc的地方看一下。
0x111就是WM_COMMAND,果然是直接把參數傳給了InternalCallWinProc
不用說,InternalCallWinProc肯定是調用了WndProc
。。。。大概就是這麼個流程,所以以後有人問SendMessage怎麼實現,簡單回單一句話就是直接調用WndProc,如下圖。
注:只針對同線程調用。
所以將代碼這樣修改後,功能和SendMessage看起來並沒有區別。