MFC消息映射机制

简介: MFC消息映射机制
+关注继续查看

一、消息映射机制的使用


不重写WindowProc,但也能处理消息


1、类必须派生自CCmdTarget,直接或间接都可以


CObject---CCmdTarget--CWnd--CFrameWnd--CMyFrameWnd--pFrame


CObject--CCmdTarget--CWinThread--CWinApp--CMyWinApp--theApp


2、类内必须添加声明宏 DECLARE_MESSAGE_MAP()


3、类外必须添加实现宏


BEGIN_MESSAGE_MAP(CMyFrameWnd,CFrameWnd)


END_MESSAGE_MAP()


4、宏展开各部分的作用


GetThisMessageMap() - 静态函数


定义一个静态数组 _messageEntries[]-保存了消息ID和处理消息函数


定义一个静态变量 messageMap - 获取父类静态变量地址(连接链表),获取相应的静态数组首地址


返回静态变量的地址


GetMessageMap - 成员虚函数


返回 静态函数(GetThisMessageMap)返回的值(链表头节点)



二、框架代码编写


#include <afxwin.h>
//创建自己的框架类
class CMyFrameWnd:public CFrameWnd  //CCmdTarget是CFramWnd的子类
{
       DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMyFrameWnd,CFrameWnd)
END_MESSAGE_MAP()
//创建自己的应用程序类
class CMywinApp:public CWinApp
{
public:
       virtual BOOL InitInstance();
};
CMywinApp theApp;
BOOL CMywinApp::InitInstance()
{
       CMyFrameWnd* pFrame = new CMyFrameWnd;
       pFrame->Create(NULL, "aiyou");
       m_pMainWnd = pFrame;
       pFrame->ShowWindow(SW_SHOW);
       pFrame->UpdateData();
       return TRUE;
}


三、处理创建窗口函数


1、在begin和end之间添加一个宏ON_MESSAGE(WM_CREATE,aiyou),参数是要处理窗口的ID,用哪个函数树立


2、类里面声明函数


class CMyFrameWnd:public CFrameWnd  //CCmdTarget是CFramWnd的子类
{
       DECLARE_MESSAGE_MAP()
public:
       LRESULT aiyou(WPARAM wParam,LPARAM lParam);
};
3、实现函数,也可以在上面的类里面实现
LRESULT CMyFrameWnd::aiyou(WPARAM wParam, LPARAM lParam) {
       AfxMessageBox("WM_CREAT消息被处理");
       return 0;
}


四、处理画图函数


1、添加宏


ON_MESSAGE(WM_PAINT, bucuo)


2、添加声明函数


LRESULT bucuo(WPARAM wParam, LPARAM lParam);


3、实现函数


LRESULT CMyFrameWnd::bucuo(WPARAM wParam, LPARAM lParam) {
       PAINTSTRUCT ps = { 0 };
       HDC hdc = ::BeginPaint(m_hWnd, &ps);
       ::TextOut(hdc, 100, 100, "hello", 5);
       ::EndPaint(m_hWnd, &ps);
       return 0;
}

4、运行效果


0a2653c851af460fa595bd959398a8f1.png

目录
相关文章
|
8月前
|
开发工具 Windows
MFC中自定义消息
MFC中自定义消息
117 0
|
消息中间件 程序员 Windows
|
Windows
MFC自定义消息
本文地址:http://blog.163.com/strive_only/blog/static/893801682010101911467765/ 消息机制是windows的典型运行机制,在MFC中有很多的消息如WM_BTN**等。
1002 0
|
Windows
MFC的消息反射机制
1、消息反射解释:   父窗口将子窗口发给它的通知消息,首先反射回子窗口进行处理(即给子窗口一个机会,让子窗口处理此消息),这样通知消息就有机会能被子窗口自身进行处理。   2、MFC中引入消息反射的原因:   在Windows的消息处理中,子窗口的发给其父窗口的通知消息只能由其父窗口进行处...
1090 0
|
消息中间件 开发工具
MFC的消息机制
MFC的消息循环(::GetMessage,::PeekMessage)消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情 分两个步骤完成: 1 “消息派送”:非对话框程序(MFC Doc/View架构)和对话框程序略有不同,但原理相差不大。
1201 0
|
Windows
(转) MFC的入口点与消息循环,消息映射
博文分析的很不错,尤其是替换默认窗口过程的这块,本人觉得,所有的这些都可以参阅侯杰的《深入浅出MFC 》。   来自:http://blog.csdn.net/sryan/article/details/7392814    1.
855 0
|
编译器
MFC的消息映射机制揭秘
MFC的设计者们在设计MFC时,紧紧把握一个目标,那就是尽可能使得MFC的代码要小,速度尽可能快。为了这个目标,他们使用了许多技巧,其中很多技巧体现在宏的运用上,实现MFC的消息映射的机制就是其中之一。
1282 0
|
程序员 Windows
MFC技术内幕系列之(四)---MFC消息映射与消息传递内幕
////////////////////////////////////////////////////////////////////////////////////                     /********* 文章系列:MFC技术内幕系列***********/       ...
994 0
推荐文章
更多