精品文档
实验八 消息处理
一、实验目的
1、 掌握MFC中消息映射的机制; 2、 学习手动添加消息映射函数的方法。 二、实验内容
1、在单文档应用程序中添加鼠标左键消息处理函数,实现在视图中绘制椭圆
消息映射简单说明:当用户在视图窗口中按下鼠标左键时,Windows发送一个消息,即WM_LBUTTONDOW消息到这个窗口。如果程序需要对WM_LBUTTONDOW做出响应,视图类必须有一个类似如下的成员函数:
void Cex6View::OnLButtonDown(UINT nFlags, CPoint point) {
// TODO: Add your message handler code here and/or call default }
在类头文件中,也必须有相应的原型说明:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg标志是一个“非运算符”,警告这是消息映射函数的原型。然后在代码文件中,还需要一个消息映射宏,把OnLButtonDown函数连接到应用程序框架上。
BEGIN_MESSAGE_MAP(CEx4View, CView) //{{AFX_MSG_MAP(CEx4View) ON_WM_LBUTTONDOWN() //}}AFX_MSG_MAP END_MESSAGE_MAP()
收集于网络,如有侵权请联系管理员删除
精品文档
最后在类的头文件中需要使用如下语句: DECLARE_MESSAGE_MAP()
以上代码都可以用Visual C++提供的ClassWizard工具,它自动对大多数消息生成响应函数,并在相应位置添加如上所示的代码。
具体步骤如下:
1、使用AppWizard生成名为Ex6的SDI工程。
2、添加m_rectEllipse和m_nColor数据成员到CEx4View:把Workspace窗口设置为ClassWizard,右击Cex6View,选定Add Member Variable,然后插入如下两个数据成员:
Private:
Crect m_rectEllipse; Int m_nColor;
3、 使用ClassWizard添加Cex6View类消息处理程序:按下Ctrl+W,出现MFC
ClassWizard对话框时,确保选定CEx4View类,如下图所示。现在,在Object IDs列表框的顶部单击Cex6View,然后,在消息列表框中滚动虚函数,并双击WM_LBUTTONDOWN。OnLButttonDown函数名应当出现在
收集于网络,如有侵权请联系管理员删除
精品文档
Member Functions列表框内部。
图6-1 MFC ClassWizard 窗口
确定后,在Ex6View.cpp和Ex6View.h以下位置就会添加加黑的代码:
//Ex6View.h protected:
//{{AFX_MSG(Cex6View)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point); //}}AFX_MSG
DECLARE_MESSAGE_MAP() //Ex4View.cpp
BEGIN_MESSAGE_MAP(Cex6View, CView) //{{AFX_MSG_MAP(Cex6View) 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()
void Cex6View::OnLButtonDown(UINT nFlags, CPoint point) {
收集于网络,如有侵权请联系管理员删除
精品文档
}
4、在Ex6View.cpp中编辑OnLButttonDown代码,如下: void Cex6View::OnLButtonDown(UINT nFlags, CPoint point) {
// TODO: Add your message handler code here and/or call default
if(m_rectEllipse.PtInRect(point)){ if(m_nColor==GRAY_BRUSH) {
m_nColor=WHITE_BRUSH; } else{
m_nColor=GRAY_BRUSH; }
InvalidateRect(m_rectEllipse); } }
5、在Ex6View.cpp中编辑构造函数和OnDraw函数,如下: Cex6View::Cex6View():m_rectEllipse(0,0,200,200) {
m_nColor=GRAY_BRUSH; }.
void Cex6View::OnDraw(CDC* pDC) {
pDC->SelectStockObject(m_nColor); pDC->Ellipse(m_rectEllipse); }
6、建立并运行程序。
2、在对话框中添加自定义消息函数,实现动态按钮。
步骤如下: 1) 2)
建立一个基于对话框的MFC工程. 在对话框中添加动态按钮。
(1) 建立控件ID号:
ID号是控件的标识,创建控件前必须先为它设置一个ID号。打开资源中的“String Table”,在空白行上双击鼠标,这时会弹出一个ID属性对话框,在其中的ID编辑框中输入ID,如:IDC_MYBUTTON,在Caption中输
收集于网络,如有侵权请联系管理员删除
相关推荐: