Why don't my dialog's UPDATE_COMMAND_UI handlers get called?

The code which dispatches ON_UPDATE_COMMAND_UI messages for menu items is implemented inside CFrameWnd, NOT CWnd. Since CDialog is derived from CWnd, you don't inherit this code. Bummer.

What can you do ? Well you can roll your own solution using the WM_INITMENUPOPUP message. For sample code, see this knowledgebase article: 


You can also handle WM_KICKIDLE (which exists to support OnIdle-type functionality for dialogs) to achieve this : see John Wismar's article on CodeGuru, at the following URL :