CMessageMap 类
此类允许对象的消息映射被另一个对象访问。
重要
无法在 Windows 运行时中执行的应用程序中使用此类及其成员。
语法
class ATL_NO_VTABLE CMessageMap
成员
公共方法
名称 | 描述 |
---|---|
CMessageMap::ProcessWindowMessage | 访问 CMessageMap 派生类中的消息映射。 |
备注
CMessageMap
是一个抽象基类,允许某个对象的消息映射被另一个对象访问。 为了让对象公开其消息映射,其类必须派生自 CMessageMap
。
ATL 使用 CMessageMap
来支持包含的窗口和动态消息映射链接。 例如,任何包含 CContainedWindow 对象的类都必须派生自 CMessageMap
。 以下代码取自 SUBEDIT 示例。 通过 CComControl,CAtlEdit
类自动派生自 CMessageMap
。
class ATL_NO_VTABLE CAtlEdit :
OtherInheritedClasses
public CComControl<CAtlEdit>
// CComControl derives from CWindowImpl, which derives from CMessageMap
{
public:
// Declare a contained window data member
CContainedWindow m_ctlEdit;
// Initialize the contained window:
// 1. Pass "Edit" to specify that the contained
// window should be based on the standard
// Windows Edit box
// 2. Pass 'this' pointer to specify that CAtlEdit
// contains the message map to be used for the
// contained window's message processing
// 3. Pass the identifier of the message map. '1'
// identifies the alternate message map declared
// with ALT_MSG_MAP(1)
CAtlEdit()
: m_ctlEdit(_T("Edit"), this, 1)
{
m_bWindowOnly = TRUE;
}
// Declare the default message map, identified by '0'
BEGIN_MSG_MAP(CAtlEdit)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
CHAIN_MSG_MAP(CComControl<CAtlEdit>)
// Declare an alternate message map, identified by '1'
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()
因为被包含的窗口,m_EditCtrl
将使用包含类中的消息映射,CAtlEdit
派生自 CMessageMap
。
有关消息映射的详细信息,请参阅文章“ATL 窗口类”中的消息映射。
要求
标头:atlwin.h
CMessageMap::ProcessWindowMessage
访问由 CMessageMap
派生类中的 dwMsgMapID 标识的消息映射。
virtual BOOL ProcessWindowMessage(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam,
LRESULT& lResult,
DWORD dwMsgMapID) = 0;
参数
hWnd
[in] 接收消息的窗口的句柄。
uMsg
[in] 发送到窗口的消息。
wParam
[in] 其他的消息特定信息。
lParam
[in] 其他的消息特定信息。
lResult
[out] 消息处理的结果。
dwMsgMapID
[in] 将处理消息的消息映射的标识符。 使用 BEGIN_MSG_MAP 声明的默认消息映射由 0 标识。 使用 ALT_MSG_MAP(msgMapID) 声明的备用消息映射由 msgMapID
标识。
返回值
如果消息已完全处理,则为 TRUE;否则为 FALSE。
备注
由 CContainedWindow 对象的窗口过程或者动态链接到消息映射的对象的窗口过程进行调用。