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

目录
相关文章
|
2月前
MFC消息映射机制
MFC消息映射机制
10 0
|
5月前
04 MFC - 消息映射
04 MFC - 消息映射
23 0
|
开发工具 Windows
MFC中自定义消息
MFC中自定义消息
159 0
|
Windows
MFC消息机制
何谓消息、消息处理函数、消息映射?消息简单的说就是指通过输入设备向程序发出指令要执行某个操作。具体的某个操作是你的一系列代码。称为消息处理函数。 在SDK中消息其实非常容易理解,当窗口建立后便会有一个函数(窗口处理函数)开始执行一个消息循环,我们还可以清楚的看到消息处理的脉络。
996 0
|
消息中间件 程序员 Windows
|
Windows
MFC自定义消息
本文地址:http://blog.163.com/strive_only/blog/static/893801682010101911467765/ 消息机制是windows的典型运行机制,在MFC中有很多的消息如WM_BTN**等。
1068 0
|
消息中间件 开发工具
MFC的消息机制
MFC的消息循环(::GetMessage,::PeekMessage)消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情 分两个步骤完成: 1 “消息派送”:非对话框程序(MFC Doc/View架构)和对话框程序略有不同,但原理相差不大。
1263 0
|
消息中间件 开发工具 Windows
深入探讨MFC消息循环和消息泵
首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情。在MFC的应用程序中(应用程序类基于CWinThread继承),必须要有一个消息循环,他的作用是从应用程序的消息队列中读取消息,并把它派送出去(::DispatchMessage)。
1532 0
|
Windows
(转) MFC的入口点与消息循环,消息映射
博文分析的很不错,尤其是替换默认窗口过程的这块,本人觉得,所有的这些都可以参阅侯杰的《深入浅出MFC 》。   来自:http://blog.csdn.net/sryan/article/details/7392814    1.
878 0