zoukankan      html  css  js  c++  java
  • 消息映射机制

    一、介绍

    消息映射是一个将消息和成员函数相互关联的表。比如,框架窗口接收到一个鼠标左击消息,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、对应的消息处理函数分别在类中定义,类外声明

  • 相关阅读:
    程序员是怎么炼成的---OC题集--练习答案与题目(3)
    程序员是怎么炼成的---OC题集--练习答案与题目(2)
    152. Maximum Product Subarray
    151. Reverse Words in a String
    150. Evaluate Reverse Polish Notation
    148. Sort List
    147. Insertion Sort List
    145. Binary Tree Postorder Traversal
    144. Binary Tree Preorder Traversal
    140. Word Break II
  • 原文地址:https://www.cnblogs.com/yanchaoyi/p/12584420.html
Copyright © 2011-2022 走看看