You just need to understand how menu items enabling/disabling is handled:
- If there is neither ON_COMMAND nor ON_UPDATE_COMMAND_UI handler the item is disabled.
- If there exists no ON_UPDATE_COMMAND_UI handler but there is an ON_COMMAND one in the currently active document or view (or even the "mainframe"), the item is enabled.
- If there exists a ON_UPDATE_COMMAND_UI handler, en-/disabling the item is determined by the handler (
pCmdUI->Enable(bEnableState)
).
Also keep in mind that:
- You may not call
EnableMenuItem()
yourself, instead call pCmdUI->Enable(bEnableState)
in an ON_UPDATE_COMMAND_UI handler. This affects not only the menu item, but any other "command"-type item (with the same ID), eg main menu, context menu, toolbar or rebar button.
- Where to put the handler, is a matter of application design and depends on the data you are processing or representing. It can be put in the mainframe class (if it depends on some "global" data or setting), in the document class (if it depends on or changes some data or setting in the document - possibly affecting all views), or in the view class(-es) (depending on or affecting the current view only).
In your case, if I understand correctly, the item is disabled because the handler is in the CDialogEx-derived class, but no instance of this class has been created yet, ie there exists no ON_COMMAND handler for your ID_EDIT_PROPERTIES command.