呼叫更新處理常式的時機
假設使用者按一下 [檔案] 功能表中的滑鼠,這會產生WM_INITMENUPOPUP訊息。 架構的更新機制會統一更新 [檔案] 功能表上的所有項目,之後使用者才能看到功能表下拉式清單。
為了如此做,架構會沿著標準命令路由的路徑,路由快顯功能表中所有功能表項目的更新命令。 要路由的命令目標有機會更新所有功能表項目,其方式是透過比對更新命令與適當的訊息對應項目 (格式為 ON_UPDATE_COMMAND_UI
) 以及呼叫「更新處理常式」函式。 因此,針對具有六個功能表項目的功能表,會傳送六個更新命令。如果功能表項目的命令識別碼存在更新處理常式,則會呼叫它來執行更新。 否則,架構會檢查是否存在該命令 ID 的處理常式,並適當地啟用或停用功能表項目。
如果在命令路由期間,架構沒有找到 ON_UPDATE_COMMAND_UI
項目,它會自動啟用使用者介面物件 (若有具相同命令 ID 的 ON_COMMAND
項目)。 否則,它會停用使用者介面物件。 因此,為確保啟用使用者介面物件,請提供物件產生之命令的處理常式,或為其提供更新處理常式。 請參閱使用者介面物件和命令識別碼 主題 中的圖表。
可以停用使用者介面物件的預設停用。 如需詳細資訊,請參閱 MFC 參考 中的 類別m_bAutoMenuEnable 成員 CFrameWnd
。
當應用程式收到WM_INITMENUPOPUP訊息時,會在架構中自動進行功能表初始化。 在閒置迴圈期間,架構會搜尋按鈕更新處理常式的命令路由,方式就和搜尋功能表幾乎一樣。