实验三 MFC消息映射编程实验
一、实验目的
(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.在类声明中声明成员函数; DECLARE_MESSAGE_MAP()
3.在类的实现部分实现成员函数;
四、鼠标绘图功能的实现代码
1.头文件
#include \
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 thisApp; //2.源文件
#include \
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) { }
LRESULT CDemoWnd::OnLButtonDown(WPARAM wParam,LPARAM lParam) { }
LRESULT CDemoWnd::OnMouseMove(WPARAM wParam,LPARAM lParam) {
CClientDC dc(this);
dc.SelectStockObject(WHITE_PEN); // 利用白色的画笔擦除原有图形 if(wParam & MK_CONTROL && wParam & MK_LBUTTON) { }
if(wParam & MK_SHIFT && wParam & MK_LBUTTON) { }
m_nX1 = LOWORD(lParam); // 绘制新的图形 m_nY1 = HIWORD(lParam);
dc.SelectStockObject(BLACK_PEN);
dc.Ellipse(m_nX0,m_nY0,m_nX1,m_nY1); dc.Rectangle(m_nX0,m_nY0,m_nX1,m_nY1);
m_nX0 = LOWORD(lParam); m_nY0 = HIWORD(lParam); return 0; return 0;
}
if(wParam & MK_CONTROL && wParam & MK_LBUTTON) { }
if(wParam & MK_SHIFT && wParam & MK_LBUTTON) { } return 0;
dc.Ellipse(m_nX0,m_nY0,m_nX1,m_nY1); dc.Rectangle(m_nX0,m_nY0,m_nX1,m_nY1);
BOOL CDemoApp::InitInstance() { }
CDemoWnd *pMainWnd = new CDemoWnd();
pMainWnd->Create(NULL,_T(\消息映射实验程序\pMainWnd->ShowWindow(m_nCmdShow); pMainWnd->UpdateWindow(); m_pMainWnd = pMainWnd; return TRUE;
五、实验结果截图如下:
六、实验总结
通过本次实验,我进一步的熟悉了Visual Studio 软件的开发环境,对这个软件有了更深的了解。学习和掌握了消息映射机制的基本原理和手工添加消息映射的方法,复习了上次实验中学到的在Visual Studio 开发环境调试程序的方法,并且可以更加熟练的应用其来修改程序。
在实验过程中,我也遇到了一些困难,比如不够熟悉Visual Studio软件的应用,不会修改项目的属性,不会设置静态链接等。经过老师和同学的指导,我学会了解决这些问题的办法。我还学会了一个小技巧,那就是可以用白色画笔来擦除原有的图形,实验课里收获了很多,感觉很有成就感。
在实验的过程中,我发现此次实验并不困难。但是我对消息映射机制的基本原理和手工添加消息映射的方法比较陌生。我通过看书,对其有了初步的了解。通过这次的实验,我对Windows程序编程有了较为全面的了解,熟练的掌握了C++程序调试的方法。对Visual Studio 软件和Visual C++ 实验这门课产生了浓厚的兴趣,我相信我以后一定会更加认真学习,学好这门课。