zoukankan      html  css  js  c++  java
  • Windows的四类消息

    Windows的三类消息
    1、标准消息
    宏名称 对映消息 消息处理函数(名称已由系统预设)
    ON_WM_CHAR WM_CAHR OnChar
    ON_WM_CLOSE WM_CLOSE OnClose
    ON_WM_CREATE WM_CREATE OnCreate
    ON_WM_DESTROY WM_DESTROY OnDestroy
    ON_WM_LBUTTONDOWN WM_LBUTTONDOWN OnLButtonDown
    ON_WM_LBUTTONUP WM_LBUTTONUP OnLButtonUp
    ON_WM_MOUSEMOVE WM_MOUSEMOVE OnMouseMove
    ON_WM_PAINT WM_PAINT OnPaint
    ...

    如:键盘消息
    键盘消息是应用程序中使用最频繁的消息之一,
    当用户使用键盘对应用程序进行操作,就发送键盘消息。
    一般来说,Visual C++中的键盘消息主要有如下3种。

    WM_CHAR:该消息的处理函数OnChar()。
    WM_KEYDOWN:用户按下一个非系统键。
    WM_KEYUP:在非系统键被释放时产生。

    如:鼠标消息
    与键盘消息类似,鼠标消息也是Windows应用程序中使用最为频繁的消息之一。
    一般来说,Windows应用程序中的鼠标消息主要有如下几种。

    WM_MOUSEMOVE:用户将鼠标移进窗口或在窗口中移动。
    WM_LBUTTONDOWN:用户按下左键。
    WM_LBUTTONUP:用户释放左键。
    WM_LBUTTONDBCLICK:用户双击左键。
    WM_RBUTTONDOWN:用户按下右键。
    WM_RBUTTONUP:用户释放右键。
    WM_RBUTTONDBCLICK:用户双击右键。

    如:窗口消息
    窗口消息是指对Windows应用程序的窗口进行某些操作时发送的消息。
    Visual C++ 6.0中,包含了如下6种窗口消息。

    WM_CREATE:窗口被创建。
    WM_DESTROY:窗口被销毁。
    WM_CLOSE:窗口被关闭。
    WM_MOVE:窗口发生移动。
    WM_SIZE:窗口发生改变。
    WM_PAINT:窗口发生重绘。

    如:焦点消息
    焦点消息是指当窗口中的某个对象得到焦点和失去焦点的时候,
    对应窗口或对象触发的操作。一般来说,只有下面两种焦点消息。

    WM_SETFOCUS:窗口得到焦点。
    WM_KILLFOCUS:窗口失去焦点。
    当一个窗口从非活动状态变为具有输入焦点的活动状态的时候,
    它就会收到WM_SETFOCUS消息,
    而当一个窗口失去输入焦点变为非活动状态的时候它就会收到WM_KILLFOCUS消息。

    如:定时器消息
    Windows的定时器是一种周期性消息产生装置,
    当用户为一个窗口设置了定时器资源之后,系统就会按
    规定的时间间隔向窗口发送定时器消息,在这个消息中
    就可以处理一些需要定期处理的事情
    。定时器消息只有一种:WM_TIMER,其响应函数是OnTimer。
    对于定时器的操作,通常都会和函数SetTimer()配合使用。
    在响应OnTimer函数之前,应先添加一个定时器对其进行触发,
    如果没有建立定时器,系统是不会自己去触发OnTimer函数的,
    SetTimer()函数的作用就是设置定时器 。

    2、命令消息
    命令消息(WM_COMMAND)的一般对映规则是:
    ON_COMMAND(<id>,<memberFxn>)
    例如:
    ON_COMMAND(IDM_ABOUT,OnAbout)

    3、控件通知消息
    [Notification消息](由控制组件产生,例如BN_xxx)的对映机制的宏分为好几种
    (因为控制组件本来就分为好几种),以下各举一例做代表
    控制组件 宏名称 消息处理函数
    Button ON_BN_CLICKED(<id>,<memberFxn>) memberFxn
    ComboBox ON_CBN_DBLCLK(<id>,<memberFxn>) memberFxn
    Edit ON_EN_SETFOCUS(<id>,<menberFxn>) memberFxn
    ListBox ON_LBN_DBLCLK(<id>,<memberFxn>) memberFxn

    各个消息处理函数均应以afx_msg void 为函数形式

    消息映射及消息响应:
    MFC采用消息映射(Message Map)机制取代C/C++语言中的switch-case结构来处理消息。

    MFC消息映射机制包括一组消息映射宏。一条消息映射宏把一个Windows消息和其消息处
    理函数联结起来。

    在类的实现源文件中用
    BEGIN_MESSAGE_MAP(derived class,base class)

    END_MESSAGE_MAP()宏来定义消息映射。

    在类定义的结尾用DECLARE_MESSAGE_MAP()宏来声明使用消息映射。

    BEGIN_MESSAGE_MAP(theclass, baseclass)
    //{{AFX_MSG_MAP(theclass)
    ON_ . . . . . . // MFC预定义的消息映射宏
    ON_MESSAGE(message , memberFxn)
    // 用户自定义的消息映射宏
    . . . . . .
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    //注意:
    特殊注解“//{{AFX_MSG_MAP”是ClassWizard类向导用于维护消息映射宏的标记,
    用户不要删除注解轻易修改注解内的代码。

    4、用户自定义消息
    1.首先在为类实现文件中定义消息。
    #define WM_MYMESSAGE WM_USER+100

    2.在类中声明消息处理函数。
    afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam)

    3.在类的消息映射表中加入映射项。
    ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)

    4.在类上实现消息处理函数。

    5.使用SendMessage函数或PostMessage发送消息
    SendMessage(WM_MYMESSAGE,0L,0L);

  • 相关阅读:
    新概念第二册(1)--英语口语听力课1
    外企面试课程(一)---熟悉常见的缩略词
    公司 邮件 翻译 培训 长难句 结课
    workflow
    公司 邮件 翻译 培训 长难句 20
    公司 邮件 翻译 培训 长难句 19
    Engineering Management
    公司 邮件 翻译 培训 长难句 18
    公司 邮件 翻译 培训 长难句 17
    第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头
  • 原文地址:https://www.cnblogs.com/veis/p/6940015.html
Copyright © 2011-2022 走看看