我們經常使用VC6.0 的菜單來完成某些任務。但是你有沒有深究其路由的過程呢?
我們添加一個菜單,並在視類 文檔類 框架類 應用程序(即:C*App類)添加他的消息響應函數時,它的執行順序是什麼?
順序是:視類——>文檔類——>框架類——>應用程序
Windows 的消息分為三類:
標准消息:除WM_COMMAND 之外的,以WM_開頭的消息。
命令消息:來自菜單,工具欄,加速鍵(快捷鍵)的消息
通知消息:由控件產生的(如按鈕)
而命令消息,通知消息只能被從CCmdTarget派生的類處理,不能接受標准消息。標准消息由從CWnd派生的類處理。
當單擊命令菜單時,首先接收消息的是框架類,然後框架類交給視類,視類根據消息映射機制看能否處理,不能則交給文檔類。
文檔類處理過程同視類。假如不能處理,則交給視類,由視類交給框架類,框架類根據消息映射機制看能夠處理。不能則交給應用程序類處理。