Loading

消息映射机制

一、介绍

消息映射是一个将消息和成员函数相互关联的表。比如,框架窗口接收到一个鼠标左击消息,MFC将搜索该窗口的消息映射,如果存在一个处理 WM_LBUTTONDOWN 消息的处理程序,然后就调用 OnLButtonDown

二、具体实现

1、所操作类中,声明消息映射宏

//mfc.h:
class MyFrame:public CFrameWnd //窗口框架类
{
public:
    MyFrame();
    //声明宏 提供消息映射机制
    DECLARE_MESSAGE_MAP();
  afx_msg void OnLButtonDown(UINT, CPoint);

    afx_msg void OnChar(UINT, UINT, UINT);

    afx_msg void OnPaint(); };

2、通过放置标识消息的宏来执行消息映射,相应的类将在对 BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 的调用之间处理消息

//mfc.cpp:
//分界宏
BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)
    ON_WM_LBUTTONDOWN() //鼠标左键按下
    ON_WM_CHAR() //键盘
    ON_WM_PAINT() //绘图
END_MESSAGE_MAP()

MyFrame::MyFrame()
{
    Create(NULL, TEXT("mfc"));
}

void MyFrame::OnLButtonDown(UINT, CPoint point)
{
    /*TCHAR buf[1024];
    wsprintf(buf, TEXT("x = %d,y = %d"), point.x, point.y);

    MessageBox(buf);*/

    CString str;
    str.Format(TEXT("x = %d,y = %d"), point.x, point.y);
    MessageBox(str);

}

void MyFrame::OnChar(UINT key, UINT, UINT)
{
    CString str;
    str.Format(TEXT("按下了%c键"), key);

    MessageBox(str);
}

void MyFrame::OnPaint()
{
    CPaintDC dc(this); //CDC里找其他的能画的图形

    dc.TextOutW(100, 100, TEXT("为了部落"));

    //画椭圆
    dc.Ellipse(10, 10, 100, 100);
}

3、对应的消息处理函数分别在类中定义,类外声明

 

posted @ 2020-03-27 21:16  天使的羽翼  阅读(291)  评论(0编辑  收藏  举报