复习MFC之消息-温故而知新

本文详细介绍MFC应用程序中消息处理的方法,包括消息映射、命令消息、自定义消息及参数传递等关键步骤,帮助开发者深入理解MFC消息机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、新建mfc项目

mfc应用程序

应用程序类型:单个文档

项目类型:MFC标准

完成

 

二、添加标准消息

1、头文件函数声明

 public:
afx_msg void OnLButtonDown(UINT uflag,CPoint point);

2、源文件函数实现

void CMy21View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
::MessageBox(NULL,L”aaaa”,L”提示”,MB_OK);
CView::OnLButtonDown(nFlags, point);
}

3、消息映射表添加消息类型

ON_WM_LBUTTONDOWN()

 

三、三种函数:
//::MessageBox(NULL,L”bbbb”,L”提示”,MB_OK);                //WindowsApi
//this->MessageBox(L”bbbb”);                                          //MFC类的成员函数
//AfxMessageBox(L”bbbb”);                                              //MFC全局函数

 

四、TRACE输出

类似于printf,使用格式完全相同

 

五、命令消息(菜单栏和工具栏和快捷键消息)

菜单栏和快捷键可以通过向导:

右键

添加事件处理程序

工具栏如果添加消息:

MainFrm.h添加声明:

afx_msg void OnToolBar();

MainFrm.cpp添加实现和消息映射:

void CMainFrame::OnToolBar()
{
TRACE(“工具栏\n”);
}

ON_COMMAND(ID_BUTTON32772,&CMainFrame::OnToolBar)

如果有警告,则可能是没有写左下角的提示,在属性上面可以添加

 

六、自定义消息(实现在视图界面点击发送消息给frame)

1、添加LButtonDown消息(右键属性添加)

2、在stdafx.h里面定义宏

#define UM_VIEW_TO_FRAME WM_USER+1

3、在LButtonDown中添加

::SendMessage(AfxGetApp()->m_pMainWnd->m_hWnd,UM_VIEW_TO_FRAME,0,0);

4、声明并定义自定义函数

afx_msg LRESULT ONVIEWTOFRAME(WPARAM wParam, LPARAM lParam);

LRESULT CMainFrame::ONVIEWTOFRAME(WPARAM wParam, LPARAM lParam)
{
TRACE(“CMainFrame::ONVIEWTOFRAME\n”);
return 0;
}

5、完善消息映射

ON_MESSAGE(UM_VIEW_TO_FRAME,CMainFrame::ONVIEWTOFRAME)

6、在LButtonDown中添加

TRACE(“CMy21View::OnLButtonDown\n”);

在frame的消息发送到view

1、添加命令消息(右键添加事件处理程序)

2、在stdafx.h里面定义宏

#define UM_FRAME_TO_VIEW WM_USER+2

3、在On32773中添加(这个和之前的很不一样)

this->GetActiveView()->SendMessage(UM_FRAME_TO_VIEW);

4、声明并定义自定义函数

afx_msg LRESULT ONFRAMETOVIEW(WPARAM wParam, LPARAM lParam);

LRESULT CMy21View::ONFRAMETOVIEW(WPARAM wParam, LPARAM lParam)
{
TRACE(“CMy21View::ONFRAMETOVIEW\n”);
return 0;
}

5、完善消息映射

ON_MESSAGE(UM_FRAME_TO_VIEW,CMy21View::ONFRAMETOVIEW)

6、在On32773中添加

TRACE(“CMainFrame::On32773\n”);

 

七、自定义消息传参

::SendMessage(AfxGetApp()->m_pMainWnd->m_hWnd,UM_VIEW_TO_FRAME,point.x,point.y);

传到了wParam和lParam上可以获取鼠标的横纵坐标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值