Win32核心编程:SendMessage与PostMessage详解

需积分: 12 12 下载量 135 浏览量 更新于2024-07-13 收藏 1.2MB PPT 举报
"这篇内容主要介绍了Win32核心编程中的消息发送机制,包括SendMessage和PostMessage两个函数的使用,以及Windows编程的基础知识,如应用程序类型、入口函数、文件存在方式和执行方式。此外,还提到了Windows开发环境,如Visual Studio C++的版本变迁、开发工具和库,以及Windows库和头文件的介绍。最后,简要提及了Windows程序的HelloWorld示例中的WinMain函数。" 在Windows编程中,消息的发送是窗口之间通信的关键。`SendMessage`和`PostMessage`函数用于向指定窗口发送消息,它们的区别在于同步和异步处理。`SendMessage`会阻塞调用线程,直到接收方处理完消息并返回结果,而`PostMessage`则立即返回,不等待消息被处理,适合于非阻塞的场景。 `SendMessage`和`PostMessage`函数的原型相同,都需要四个参数: - `hWnd`:接收消息的窗口句柄。 - `Msg`:要发送的消息ID,可以是预定义的系统消息,也可以是自定义的消息。 - `wParam`:消息的附加参数,通常用于传递整型数据。 - `lParam`:另一个附加参数,可以传递更复杂的数据,如指针。 Windows应用程序主要有三种类型:控制台程序、窗口程序和动态库程序(DLL)。控制台程序基于DOS,窗口程序有自己的窗口进行交互,动态库程序则包含可被其他程序调用的代码和数据。 开发Windows程序时,入口函数是关键。控制台程序的入口是`main`,窗口程序的入口是`WinMain`,动态库程序的入口是`DllMain`。程序的文件形式也有区别,控制台和窗口程序生成EXE文件,动态库生成DLL文件,静态库生成LIB文件。 Windows开发环境通常使用Visual Studio,其版本从早期的VC++ 1.5到后来的VC++ 2010。开发过程中涉及的工具有编译器CL.EXE、链接器LINK.EXE和资源编译器RC.EXE。Windows API分布在kernel32.dll、user32.dll和gdi32.dll等库中,对应的头文件如`windows.h`、`windef.h`、`winbase.h`、`wingdi.h`和`winuser.h`等提供了接口声明。 `WinMain`函数是窗口程序的入口,其中的`hInstance`参数代表当前程序实例的句柄,`hPrevInstance`在现代Windows中通常为NULL,`LPSTR lpCmdLine`则是命令行参数。编写简单的“Hello, World”程序时,通常会在`WinMain`中初始化窗口,并响应消息循环。
2012-01-09 上传
一、Win32编程基本概念 1、消息驱动 在介绍Windows消息驱动概念之前,我们首先来回顾面向过程的程序结构:main()程序有明显的开始、中间过程和结束点,程序是围绕这个过程编写好相关的子过程,再把这些子过程串联在一起。程序编好以后,该过程也就确定了,程序必须按照规定好的顺序执行:是否需要用户的输入、输入什么、程序取得用户输入以后做什么处理,处理完毕将结果显示给用户。该过程一旦确定,程序的执行过程也是固定的,用户不能干预。 而Windows编程所采用设计思想是:消息驱动,又叫做事件驱动。在这种程序结构中,程序没有明显的开始、结束,程序流程的控制由各种随机发生、不确定、没有预先设定顺序的事件的发生来触发。是一个不断产生消息和处理消息的过程。 也就是说程序一运行开始处于等待消息状态,取得消息以后,就对该消息做出相应的处理,完成处理以后又进入等待消息的状态。这种程序结构与Windows操作系统结合非常紧密,最明显一点就是消息的管理是由操作系统完成的。应用程序从操作系统获得消息有两种方式:一种就是应用程序调用Windows提供的消息获取函数;另外一种就是回调函数,由操作系统自己调用。 这种消息驱动机制,有点像银行的柜台业务:早上八点,银行开门(Windows应用程序开始运行),每个营业员(Windwows线程)回到自己的柜台开始办公。如果有顾客来办理相关业务(相当于Windows消息),那么对应的业务员就进行处理。顾客来办理业务的时间以及业务类型都是随机的,如果某一时刻没有顾客办理业务并且没有到下班时间(Windows应用程序退出)的话,那么相关的业务员进入等待状态。所有的业务员不断重复该过程,直到下班(Windows应用程序退出)。