第四章、简单绘图

4.1MFC消息映射机制

为CMainFrame类添加WM_LBUTTONDOWN消息响应函数,在该消息相应函数的内部调用MessageBox函数,这里的MessageBox函数与SDK里的不同,少了窗口句柄的函数。因为CWnd类有成员变量m_hWnd,用来保存当前窗口句柄,CMainFrame类继承与CWnd类,同样地也继承了该成员变量。

void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point) 
{
  // TODO: Add your message handler code here and/or call default
  MessageBox("MainFrame Clicked!");

CFrameWnd::OnLButtonDown(nFlags, point);
 }

但是运行程序后并没有出现相应的消息框。

给CView类添加消息响应函数:
换另一种方法,打开View菜单,选择ClassWizard。
Message Maps:添加或者删除消息处理函数、成员函数,或者类。
Add Function->Edit Code

在这里插入图片描述
在这里插入图片描述
删除消息响应函数,直接在该函数鼠标右键,选择Delete

4.1.1消息映射机制

增加一个消息响应函数之后,在源文件处都会增加三处代码。
消息响应函数的原型:
TestView.h中,

// Generated message map functions
protected:
 //{{AFX_MSG(CTestView)
 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};

afx_msg注释宏,该宏表示一个消息响应函数的声明。

ON_WM_LBUTTONDOWN消息映射宏:
TestView.cpp文件中,

BEGIN_MESSAGE_MAP(CTestView, CView)
 //{{AFX_MSG_MAP(CTestView)
 ON_WM_LBUTTONDOWN()
 //}}AFX_MSG_MAP
 // Standard printing commands
 ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
 ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
 ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

将WM_LBUTTONDOWN消息与消息响应函数关联起来。

消息响应函数的定义:
在TestView.cpp文件中,

// CTestView message handlers
void CTestView::OnLButtonDown(UINT nFlags, CPoint point) 
{
 // TODO: Add your message handler code here and/or call default
 MessageBox("View Clicked!");
 CView::OnLButtonDown(nFlags, point);
}

先找消息响应函数的声明,然后找消息映射宏,最后找消息处理函数。

发布了47 篇原创文章 · 获赞 3 · 访问量 864

猜你喜欢

转载自blog.csdn.net/qq_42148307/article/details/105338200