如前所述,函数GetMessage负责从应用程序的消息队列中取出消息,而函数DispatchMessage()要求Windows将消息传送给在MSG结构中为窗口所指定的窗口过程。然后出台的就是这个窗口过程了,这个窗口过程的任务是干什么呢?就是最终用来处理消息的,就是消息的处理器而已,那么这个函数就是WindowProc,在Visual C++6.0中按F1启动MSDN,按下面这个路径走下来:

PlatForm SDK-->User Interface services-->Windows user Interface-->Windowing-->Window Procedures-->Window Procedure Reference-->Windows Procedure Functions-->WindowProc

啊,太累了,不过我们终于的MSDN中找到了这个函数,前几次我讲解这些API函数的时候,都是的知道的情况下搜索出来的,所以没有详细给出每个函数的具体位置,而这次我却是一点点去找的,还好,没被累死,体会到MSDN的庞大了吧,不过我用的是MSDN2000,是D版的,三张光盘装。你用的MSDN如果按这个路径走下去的话,可能会找不到,不过我想大致也是在这个位置了,找找看!!!

LRESULT CALLBACK WindowProc

(

HWND hwnd, // handle to window

UINT uMsg, // message identifier

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

);

这个函数这里被我们称为WndProc.

下面讲解:

不知你注意到了没有,这个函数的参数与刚刚提到的GetMessage调用把返回的MSG结构的前四个成员相同。如果消息处理成功,WindowProc的返回值为0.

Windows的启动应用程序时,先调用WinMain函数,然后调用窗口过程,注意:在我们的这个程序中,只有一个窗口过程,实际上,也许有不止一个的窗口过程。例如,每一个不同的窗口类都 有一个与之相对应的窗口过程。无论Windows何时想传递一个消息到一窗口,都将调用相应的窗口过程。当Windows从环境,或从另一个应用程序,或从用户的应用程序中得到消息时,它将调用窗口过程并将信息传给此函数。总之,窗口过程函数处理所有传送到由此窗口类创建的窗口所得到的消息。并且窗口过程有义务处理Windows扔给它的任何消息。我们在学习Windows程序设计的时候,最主要的就是学习这些消息是什么以及是什么意思,它们是怎么工作的。

令我们不解的是,在程序中我们看不出来是哪一个函数在调用窗口过程。它其实是一个回调函数.前面已经提到,Windows把发生的输入事件转换成输入消息放到消息队列中,而消息循环将它们发送到相应的窗口过程函数,真正的处理是在窗口过程函数中执行的,在Windows中就使用了回调函数来进行这种通信。

回调函数是输出函数中特殊的一种,它是指那些在Windows环境下直接调用的函数。一个应用程序至少有一个回调函数,因为在应用程序处理消息时,Windows调用回调函数。这种回调函数就是我们前面提到的窗口过程,它对对应于一个活动的窗口,回调函数必须向Windows注册,Windows实施相应操作即行回调。

每个窗口必须有一个窗口过程与之对应,且Windows直接调用本函数,因此,窗口函数必须采用FAR PASCAL调用约定。在我们的第二只小板凳中,我们的窗口函数为WndProc,必须注意这里的函数名必须是前面注册的窗口类时,向域wc.lpfnWndProc所赋的WndProc。函数WndProc就是前面定义的窗口类所生成的所有窗口的窗口函数。

在我们的这个窗口函数中,WndProc处理了共有两条消息:WM_PAINTWM_DESTROY.

窗口函数从Windows中接收消息,这些消息或者是由WinMain函数发送的输入消息,或者是直接来自Windows的窗口管理消息。窗口过程检查一条消息,然后根据这些消息执行特定的动作未被处理的消息通过DefWindowProc函数传回给Windows作缺海上处理。

可以发送窗口函数的消息约有220种,所有窗口消息都以WM_开头,这些消息在头文件中被定义为常量。引起Windows调用窗口函数的原因有很多,,如改变窗口大小啊,改变窗口在屏幕上的位置啊什么的。

窗口过程,窗口过程函数相关推荐

  1. 记录qt窗口在拖动过程中出现的问题

    问题描述: 在窗口拖动的过程中刚开始可以流畅的拖动窗口,但是一小会儿之后出现窗口拖不动的现象,或者按下鼠标在拖动区域内可以流畅拖动,但是按下鼠标朝一个方向拖动后,释放鼠标,按照此操作操作几次后,出现窗 ...

  2. Flink窗口全解析:三种时间窗口、窗口处理函数使用及案例

    我们经常需要在一个时间窗口维度上对数据进行聚合,窗口是流处理应用中经常需要解决的问题.Flink的窗口算子为我们提供了方便易用的API,我们可以将数据流切分成一个个窗口,对窗口内的数据进行处理.本文将 ...

  3. python中读取文件过程中seek()函数的使用

    python中读取文件过程中seek()函数的使用 目录 概述: 语法: 参数: 返回值: 实例: 概述: seek() 方法用于移动文件读取指针到指定位置. 语法: seek() 方法语法如下: 文 ...

  4. 【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )

    文章目录 一.导入头文件 二.桌面程序入口函数 三.注册窗口 四.创建窗口 五.显示窗口 六.完整代码示例 七.相关资源 基于 [OpenGL]一.Visual Studio 2019 创建 Wind ...

  5. MYSQL储存过程和储存函数和变量

    储存过程和储存函数和变量 变量的应用: 变量分类为: 系统变量和自定义变量 系统变量和全局变量还可以细分: 系统变量分类: 全局变量和会话变量 自定义变量分类: 用户变量和局部变量 下面是变量的一些具 ...

  6. 面向过程、面向函数、面向对象的区别浅谈

    Python的面向过程.面向函数.面向对象的区别浅谈 转自--猎奇古今,加上其他 有人之前私信问我,python编程有面向过程.面向函数.面向对象三种,那么他们区别在哪呢? 面向过程就是将编程当成是做 ...

  7. C函数调用过程原理及函数栈帧分析

    在x86的计算机系统中,内存空间中的栈主要用于保存函数的参数,返回值,返回地址,本地变量等.一切的函数调用都要将不同的数据.地址压入或者弹出栈.因此,为了更好地理解函数的调用,我们需要先来看看栈是怎么 ...

  8. 数据窗口控件的函数Describe()

    Describe()  功能:返回数据窗口控件结构方面的指定信息包括DataWindow   对象以及数据窗口  对象中其他对象的属性取值数据窗口中的每个列每个标题等等都是对象各自都有一  组描述其特 ...

  9. 第三十三篇,网络编程TCP协议通讯过程实现和函数接口

    网络编程知识点概览 ========================================    1.核心知识点        传输层的两个重要协议             tcp协议:   ...

  10. Oracle-存储过程、存储函数、触发器

    Oracle-存储过程.存储函数.触发器 目录 文章目录 1.存储过程 1.1.概念 1.2.创建语法 1.3.实例 2.存储函数 3.out类型参数 4.存储过程与存储函数直接的区别 3.触发器 * ...

最新文章

  1. mybatis3:Invalid bound statement (not found)
  2. premiere pr 某个面板悬浮后怎么还原
  3. firefox不激活新标签页
  4. github 使用总结-----转
  5. Java机器学习库ML之十模型选择准则AIC和BIC
  6. 让TP5.0在SWOOLE上飞起来
  7. linux如何捕获9的信号,2018-9-17-bash之信号捕捉
  8. redmine安装指引
  9. docker保存日志文件到本地
  10. [剑指offer][JAVA]面试题第[24]题[反转链表][递归][双指针][头插法]
  11. 北京焦灼?上海颓废?看大数据如何解读城市性格
  12. numpy+pandas+matplotlib画箱形图
  13. Ubuntu下为Hadoop安装配置Hbase教程
  14. 【Unity3D】GUI控件
  15. 软件工程(吕云翔第二版)部分知识点
  16. 医院随访管理系统的特点
  17. 001深度强化学习的异步方法
  18. HTML网页的基本结构
  19. 【BZOJ5336】[TJOI2018]party(动态规划)
  20. linux鼠标手势,Linux 系统中全能的鼠标手势——Easystroke.docx

热门文章

  1. Program Files 目录的dos文件名模式下的缩写PROGRA~1
  2. linux安装intel驱动
  3. 小学计算机关于word的内容,小学信息技术说课《了解word界面》
  4. dslabs实验记录
  5. canal工作原理及简单案例演示
  6. php怎么设置学年下拉框_在PHP中,为下拉列表设置“name”属性的方法是()
  7. vulnhub--lampiao(脏牛提权)
  8. keepalived源码解析 —— master 是如何实现定时发送 vrrp 通告
  9. 史上最全 Appium 自动化测试从基础到框架实战精华学习笔记(一)
  10. HTML5期末大作业_影视网站设计——_指环王:护戒使者(13页) TML+CSS+JavaScript 学生DWHTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作