Event Maps

Whenever a control wishes to notify its container that some action (determined by the control developer) has happened (such as a keystroke, mouse click, or a change to the control's state) it calls an event-firing function. This function notifies the control container that some important action has occurred by firing the related event.

The Microsoft Foundation Class Library offers a programming model optimized for firing events. In this model, "event maps" are used to designate which functions fire which events for a particular control. Event maps contain one macro for each event. For example, an event map that fires a stock Click event might look like this:

BEGIN_EVENT_MAP(CSampleCtrl, COleControl)
   //{{AFX_EVENT_MAP(CSampleCtrl)
   EVENT_STOCK_CLICK( )
   //}}AFX_EVENT_MAP
END_EVENT_MAP()

The EVENT_STOCK_CLICK macro indicates that the control will fire a stock Click event every time it detects a mouse click. For a more detailed listing of other stock events, see the article ActiveX Controls: Events in Visual C++ Programmer's Guide. Macros are also available to indicate custom events.

Although event-map macros are important, you generally don't insert them directly. This is because ClassWizard automatically creates event-map entries in your source files when you use it to associate event-firing functions with events. Any time you want to edit or add an event-map entry, you can use ClassWizard.

To support event maps, MFC provides the following macros:

Event Map Declaration and Demarcation

DECLARE_EVENT_MAP Declares that an event map will be used in a class to map events to event-firing functions (must be used in the class declaration).
BEGIN_EVENT_MAP Begins the definition of an event map (must be used in the class implementation).
END_EVENT_MAP Ends the definition of an event map (must be used in the class implementation).

Event Mapping Macros

EVENT_CUSTOM Indicates which event-firing function will fire the specified event.
EVENT_CUSTOM_ID Indicates which event-firing function will fire the specified event, with a designated dispatch ID.

Message Mapping Macros

ON_OLEVERB Indicates a custom verb handled by the OLE control.
ON_STDOLEVERB Overrides a standard verb mapping of the OLE control.