消息映射编程实验

2020-04-14 22:23

MFC 消息映射编程实验

实 验 报 告

姓名:杨培培 班级:电气12级3班

12053307

【预备知识】

1、消息映射

消息映射本质上就是一个数组,MFC 使用消息映射建立消息和类的成员函数的对应关系。消息映射数组中存储的信息

(1) 所处理的消息;

(2) 消息应用的控件ID,或者ID 范围; (3) 消息所传递的参数; (4) 消息所期望的返回值。 2、消息映射宏

下面介绍常用的两个消息映射宏: (1) ON_MESSAGE:处理任意消息

语法规则:

ON_MESSAGE(ID,func)

LRESULT func(WPARAM wParam, LPARAM lParam); 举例:映射鼠标左键按下消息

ON_MESSAGE(WM_LBUTTONDOWN, OnLButtonDown) LRESULT OnLButtonDown(WPARAM wParam, LPARAM lParam); (2) ON_COMMAND:处理WM_COMMAND 消息

语法规则:

ON_COMMAND(ID,func) void func( );

举例:映射菜单项命令消息

ON_COMMAND(ID_OPER_TEST, OnOperTest) void OnOperTest ( );

3、消息映射步骤

MFC 中手工添加消息映射按照如下步骤进行:

(1) 在BEGIN_MESSAGE_MAP 和END_MESSAGE_MAP 之间添加消息映射

宏;

BEGIN_MESSAGE_MAP(CDemoView, CView) ON_MESSAGE(WM_KEYDOWN, OnKeyDown) ON_COMMAND(ID_OPER_TEST, OnOperTest) END_MESSAGE_MAP( ) (2) 在类声明中声明成员函数; (3) 在类的实现部分实现成员函数。

【实验目的】

(1) 熟悉Visual Studio 开发环境;

(2) 掌握消息映射机制的基本原理和手工添加消息映射的方法; (3) 熟练掌握在Visual Studio 开发环境调试程序的方法。

【实验内容】

设计 MFC 应用程序,手工添加消息映射,实现下面的功能: (1) 按下CTRL 键,拖动鼠标绘制矩形; (2) 按下SHIFT 键,拖动鼠标绘制椭圆。

【实验报告】

(1) 总结手工添加消息映射的基本步骤;

①在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加消息映射宏;

BEGIN_MESSAGE_MAP(CDemoView, CView) ON_MESSAGE(WM_LBUTTONDOWN, OnLButtonDown) ON_COMMAND(ID_OPER_TEST, OnOperTest) END_MESSAGE_MAP( ) ②在类声明中声明成员函数; ③在类的实现部分实现成员函数。 (2) 列出鼠标绘图功能的实现代码; 源文件 Demo.cpp 代码

#include \

BEGIN_MESSAGE_MAP(CDemoWnd, CFrameWnd) ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown) ON_MESSAGE(WM_MOUSEMOVE,OnMouseMove) ON_MESSAGE(WM_LBUTTONUP,OnLButtonUp) ON_MESSAGE(WM_TIMER,OnTimer) END_MESSAGE_MAP()

LRESULT CDemoWnd::OnLButtonDown(WPARAM wParam, LPARAM lParam) {

m_X0 = m_X1 = LOWORD(lParam); m_Y0 = m_Y1 = HIWORD(lParam); return 0; }

LRESULT CDemoWnd::OnMouseMove(WPARAM wParam, LPARAM lParam) {

/*CClientDCdc(this);

dc.SelectStockObject(WHITE_PEN);

if((wParam& MK_LBUTTON) && (wParam& MK_CONTROL)) {

dc.Ellipse(m_X0,m_Y0,m_X1,m_Y1); }

if((wParam& MK_LBUTTON) && (wParam& MK_SHIFT)) {

dc.Rectangle(m_X0,m_Y0,m_X1,m_Y1);

}

m_X1 = LOWORD(lParam); m_Y1 = HIWORD(lParam);

dc.SelectStockObject(BLACK_PEN);

if((wParam& MK_LBUTTON) && (wParam& MK_CONTROL)) {

dc.Ellipse(m_X0,m_Y0,m_X1,m_Y1); }

if((wParam& MK_LBUTTON) && (wParam& MK_SHIFT)) {

dc.Rectangle(m_X0,m_Y0,m_X1,m_Y1); }

return 0; */

CClientDC dc(this); CPen hp,*pOldPen,hp1;

hp.CreatePen(PS_SOLID,3,RGB(255,0,0)); pOldPen=dc.SelectObject(&hp); CPoint point [3];

point [0] = CPoint(m_X0,(m_Y0+m_Y1)/2); point [1] = CPoint(m_X0,m_Y0);

point [2] = CPoint((m_X0+m_X1)/2, m_Y0);

if((wParam & MK_CONTROL) && (wParam & MK_LBUTTON)) //按下ctrl键,拖动鼠标绘制矩形 {

dc.Rectangle(m_X0,m_Y0,m_X1,m_Y1); }

if((wParam & MK_SHIFT) && (wParam & MK_LBUTTON))//按下shift键,拖动鼠标绘制椭圆 {

dc.Rectangle(m_X0,m_Y0,(m_X0+m_X1)/2,(m_Y0+m_Y1)/2); hp1.CreatePen(PS_SOLID,3,RGB(255,255,255)); pOldPen=dc.SelectObject(&hp1); dc.Polyline(point, 3); dc.SelectObject(pOldPen);

dc.Ellipse(m_X0,m_Y0,m_X1,m_Y1); }

m_X1= LOWORD(lParam); m_Y1 = HIWORD(lParam); return 0; }

LRESULT CDemoWnd::OnLButtonUp(WPARAM wParam, LPARAM lParam) {

/* CClientDCdc(this);

dc.SelectStockObject(WHITE_PEN);


消息映射编程实验.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:七年级上册语文前三单元知识点总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: