文档库 最新最全的文档下载
当前位置:文档库 › 实验三 MFC 消息映射编程实验

实验三 MFC 消息映射编程实验

实验三MFC 消息映射编程实验

一、实验目的

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

(2) 掌握消息映射机制的基本原理和手工添加消息映射的方法;

(3) 熟练掌握在Visual Studio 开发环境调试程序的方法。

二、实验内容

设计MFC 应用程序,手工添加消息映射,实现下面的功能:

(1) 按下CTRL 键,拖动鼠标绘制矩形;

(2) 按下SHIFT 键,拖动鼠标绘制椭圆。

三、实验结果

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

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、在类的实现部分实现成员函数。列出鼠标绘图功能的实现代码;

(2)列出鼠标绘图功能的实现代码;

头文件:

#include "afxwin.h"

class CDemoWnd:public CFrameWnd

{

public:

CDemoWnd();

~CDemoWnd();

public:

LRESULT OnPaint(WPARAM wParam,LPARAM lParam);

LRESULT OnLButtonDown(WPARAM wParam,LPARAM lParam);

LRESULT OnMouseMove(WPARAM wParam,LPARAM lParam);

DECLARE_MESSAGE_MAP()

public:

int m_nX0;

int m_nY0;

int m_nX1;

int m_nY1;

};

class CDemoApp:public CWinApp

{

public:

BOOL InitInstance();

};

CDemoApp theApp;

源文件:

#include "Demo.h"

// 构造函数

CDemoWnd::CDemoWnd()

{

m_nX0 = 0;

m_nY0 = 0;

m_nX1 = 0;

m_nY1 = 0;

}

// 析构函数

CDemoWnd::~CDemoWnd()

{

}

BEGIN_MESSAGE_MAP(CDemoWnd,CFrameWnd)

ON_MESSAGE(WM_PAINT,OnPaint)

ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown)

ON_MESSAGE(WM_MOUSEMOVE,OnMouseMove)

END_MESSAGE_MAP()

LRESULT CDemoWnd::OnPaint(WPARAM wParam,LPARAM lParam)

{

return 0;

}

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

m_nX0 = LOWORD(lParam);

m_nY0 = HIWORD(lParam);

return 0;

}

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

CClientDC dc(this);

// 1 擦除原有图形

dc.SelectStockObject(WHITE_PEN);

if(wParam & MK_CONTROL && wParam & MK_LBUTTON)

{

dc.Rectangle(m_nX0,m_nY0,m_nX1,m_nY1);

}

if(wParam & MK_SHIFT && wParam & MK_LBUTTON)

{

dc.Ellipse(m_nX0,m_nY0,m_nX1,m_nY1);

}

// 2 绘制新的图形

m_nX1 = LOWORD(lParam);

m_nY1 = HIWORD(lParam);

dc.SelectStockObject(BLACK_PEN);

if(wParam & MK_CONTROL && wParam & MK_LBUTTON)

{

dc.Rectangle(m_nX0,m_nY0,m_nX1,m_nY1);

}

if(wParam & MK_SHIFT && wParam & MK_LBUTTON)

{

dc.Ellipse(m_nX0,m_nY0,m_nX1,m_nY1);

}

return 0;

}

BOOL CDemoApp::InitInstance()

{

CDemoWnd *pMainWnd = new CDemoWnd();

pMainWnd->Create(NULL,_T("消息映射实验程序"));

pMainWnd->ShowWindow(m_nCmdShow);

pMainWnd->UpdateWindow();

m_pMainWnd = pMainWnd;

return TRUE;

}

(3)总结实验的心得体会,实验中遇到的困难以及解决的方法等。

这次实验主要练习了MFC的消息映射的编程,包括消息映射宏和在MFC中手工添加消息映射的步骤,更加深刻地学习了消息映射的概念和作用。

实验指导书中的MFC框架代码中存在一个错误class CDemoWnd: public CDemoWnd,需要将第二个CDemoWnd改为CFramewnd。

相关文档