This topic presents the steps you will take to update the Clear All menu item on Scribble’s Edit menu. The update command is handled by the document object, which has the necessary information on whether there are any strokes in the current drawing to clear.
Recall how you used WizardBar to create a starter handler for the Edit menu’s Clear All command earlier in this lesson, in the topic Bind Scribble’s Clear All Command to Its Handler Code; then you filled in the handler code. In this topic you’ll use WizardBar to create a starter handler for the update command, which you’ll then fill in with Scribble-specific code.
To add an update handler for Scribble’s Clear All menu
The Add Member Function dialog box appears, displaying a suggested name for the handler.
OnUpdateEditClearAll
.
WizardBar creates the function template for OnUpdateEditClearAll
at the end of the file.
// Enable the user-interface object (menu item or tool-
// bar button) if the document is non-empty, i.e., has
// at least one stroke.
pCmdUI->Enable( !m_strokeList.IsEmpty( ) );
The OnUpdateEditClearAll
handler takes one argument, a pointer to a CCmdUI object that contains information about the Clear All menu item on Scribble’s Edit menu.
The pointer to a CCmdUI object, pCmdUI
, is used to access a CCmdUI member function, Enable. Enable takes one Boolean argument. In this code, the expression !m_strokeList.IsEmpty( )
evaluates to nonzero if the document has at least one stroke to clear. If the expression evaluates to zero (no strokes), the menu item is disabled (and dimmed or grayed).
Note When the user opens a menu, the update handlers for all items on the menu are called before the user sees the menu displayed. Thus it’s important not to perform a lot of processing in your update handlers.
When you added the update command handler for the Clear All menu item, ClassWizard wrote the following message-map entry in the document’s message map in ScribbleDoc.cpp:
ON_UPDATE_COMMAND_UI( ID_EDIT_CLEAR_ALL, OnUpdateEditClearAll )
The ON_UPDATE_COMMAND_UI macro resembles the ON_COMMAND macro for the OnEditClearAll
message handler.
In addition, ClassWizard added a new member function declaration for OnUpdateEditClearAll
to the CScribbleDoc
class definition in ScribbleDoc.h. The function declaration looks like this:
afx_msg void OnUpdateEditClearAll( CCmdUI* pCmdUI );