实验六 MFC消息映射编程实验
一、实验目的
(1) 熟悉 Visual C++ 6.0 开发环境;
(2) 掌握消息映射机制的基本原理和手工添加消息映射的方法; (3) 熟练掌握在 Visual C++ 6.0 开发环境调试程序的方法。
二、实验内容
设计 MFC 应用程序,手工添加消息映射,实现下面的功能: (1)按下 CTRL 键,拖动鼠标绘制矩形; (2)按下 SHIFT 键,拖动鼠标绘制椭圆。
三、实验程序代码
头文件xq.h #include
class CDrawWnd:public CFrameWnd { protected:
INT x1,y1,x2,y2;BOOL Fid; };
class CDrawApp:public CWinApp { public: };
CDrawApp ThisApp; 源文件xq.cpp #include\
BEGIN_MESSAGE_MAP(CDrawWnd,CFrameWnd)
void OnPaint(WPARAM wparam,LPARAM lparam);
LRESULT OnLButtonDown(WPARAM wparam,LPARAM lparam); LRESULT OnMouseMove(WPARAM wparam,LPARAM lparam); DECLARE_MESSAGE_MAP()
BOOL InitInstance();
ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown) ON_MESSAGE(WM_MOUSEMOVE,OnMouseMove) ON_MESSAGE(WM_PAINT,OnPaint) END_MESSAGE_MAP()
void CDrawWnd::OnPaint(WPARAM wparam,LPARAM lparam) { }
LRESULT CDrawWnd::OnLButtonDown(WPARAM wparam,LPARAM lparam) { }
LRESULT CDrawWnd::OnMouseMove(WPARAM wparam,LPARAM lparam) {
CPaintDC dc(this); CBrush Brush,*pOldBrush; CPen Pen,*pOldPen;
Pen.CreatePen(PS_DASH,1,RGB(255,0,255)); pOldPen = dc.SelectObject(&Pen); Brush.CreateSolidBrush(RGB(0,0,0)); pOldBrush = dc.SelectObject(&Brush); if(Fid==1) { } if(Fid==2) { } Fid=0;
dc.Rectangle(x1,y1,x2,y2); dc.Ellipse(x1,y1,x2,y2);
x1=LOWORD(lparam); y1=HIWORD(lparam); return 0;
if((wparam & MK_CONTROL)&&(wparam&MK_LBUTTON)) {
InvalidateRect(NULL); Fid=1;
x2=LOWORD(lparam); y2=HIWORD(lparam);
}
if((wparam & MK_SHIFT)&&(wparam&MK_LBUTTON)) {
InvalidateRect(NULL); Fid=2;
x2=LOWORD(lparam); y2=HIWORD(lparam); }
BOOL CDrawApp::InitInstance() { }
CDrawWnd*pFrame=new CDrawWnd(); pFrame->Create(0,_T(\pFrame->ShowWindow(m_nCmdShow); this->m_pMainWnd=pFrame; return TRUE; } return 0;
四、实验结果
五、实验心得体会
用MFC消息映射编写程序与用API编写程序有很大的区别,前者要更难一些,当然这只是对初学者来说,我在调试程序时出现了很多以前没有见过的报错,让我无从下手,还好通过网上查询解决了问题。
六、实验总结
通过本次试验我了掌握消息映射机制的基本原理和手工添加消息映射的方法;掌握了在 Visual C++的程序调试方法。
实验中遇到许多bug,调试函数也比较麻烦,自己都通过查书,上网查资料一一解决了,过程中也学到了不少东西。