SHARE
Facebook X Pinterest WhatsApp

EventManager CWnd Derived

Environment: VC6 This article presents an Event Manager class to route messages to CWnd derived classes. The concept of this class is based on the popular Publisher / Subscriber idea. Any class shall be able to publish an event to a CEventManager object (single instance). Any class that is CWnd derived shall be able to […]

Written By
thumbnail
CodeGuru Staff
CodeGuru Staff
Apr 3, 2002
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: VC6

This article presents an Event Manager class to route messages to CWnd derived classes. The concept of this class is based on the popular Publisher / Subscriber idea. Any class shall be able to publish an event to a CEventManager object (single instance). Any class that is CWnd derived shall be able to subscribe to the event. When an event is signalled by the Publisher, the event manager shall propagate the message to the subscribers in the order of subscription.

To use this class, first create a single instance of the CEventManager class. The simplest way is to declare the variable in the file containing the CWinApp derived class.

// CWinApp derived class header file.
#includeEventManager.hextern CEventManager m_evtManager;
…
// CWinApp derived class source file.
CEventManager m_evtManager;

After this any class that wishes use the CEventManager needs to make sure that the CWinApp derived class’ header file is included in that class first.

To publish an event declare the event id in the stdafx.h first as

// stdafx.h
#define MSG_MYMESSAGE   WM_USER+1

Then call the following function in the publisher’s constructor

// publisher’s class constructor
m_evtManager.PublishEvent(MSG_MYMESSAGE);

Likewise in the subscribers class constructor,

// publisher’s class constructor
m_evtManager.SubscribeEvent(this, MSG_MYMESSAGE);

For the subscriber, we would need to declare a function to handle the event and create the message map as follows.

// message map
ON_MESSAGE(MSG_MYMESSAGE, OnMyMessage)

and the function shall be declared as follows

// afx messages
afx_msg void OnMyMessage(WPARAM, LPARAM)

In this fashion, we can have as many subscribers listening to a single event.

For a publisher to signal an event, use the following command,

// publisher
m_evtManager.SignalEvent(MSG_MYMESSAGE,wparam,lparam);

The method described here might not be optimized and there are in fact other alternatives. But what the CEventManager class shall allow us to do is to experiment and control how messages might propagate throughout the application. Thus any improvements are always welcomed.

The demo project attached demonstrates how messages might be propagated throughout the application. The CMainFrame class shall broadcast the Window Moved event which shall be caught by the CView class who shall inturn signal the CDisplayDlg1 class.

Downloads

Download demo project – 52 Kb

Download source – 2 Kb

Recommended for you...

How To Make Windows 11 Faster
Enrique Stone
Nov 30, 2022
Working with the Windows Registry in C#
Joydip Kanjilal
Jun 17, 2022
Using Multiple Programming Languages to Create an ASP.NET Website
Tariq Siddiqui
Jun 11, 2022
Finding a Microsoft Office version with .NET
Hannes DuPreez
May 20, 2022
CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2025 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.