科技网

当前位置: 首页 >通讯

Win32基于事件驱动的消息机制

通讯
来源: 作者: 2018-10-29 10:13:43

Win32基于事件驱动的消息机制

导读:

消息的产生来源于系统事情(包括计时器事件)和用户事情,Windows用消息来调入和关闭(还有其它处理,如绘制一个窗口等)应用程序,一个典型表现是在关机操作中,Windows发一个关机的消息给所有正在运行的应用程序

消息的产生来源于系统事情(包括计时器事件)和用户事情,Windows用消息来调入和关闭(还有其它处理,如绘制一个窗口等)应用程序,一个典型表现是在关机操作中,Windows发一个关机的消息给所有正在运行的应用程序,告知它们退出内存,此时,应用程序用回应消息的方法来响应OS,因此,消息是应用程序与WinOS交互的手段。.  消息的主体是应用程序之间和应用程序与 OS 之间,(这是通俗的说法,其实在一个应用程序的内部,各窗口组件之间也存在着消息的流动,窗口组件与它们的父窗口和上层窗口之间当然也有消息的传递过程,Windows内部即时流动的消息数量是如此的宠大,程序实现之外的手工分析是一种很自不量力的事情)消息的最终主体却是窗口与窗口之间,窗口与OS之间 - 因为在MFC的技术规范里,只有窗口进程才能发送和接收一个消息并处理它,当然一些非界面窗口类如文档类也能处理一个消息,消息的最终归宿是某个窗口类的成员函数,也就是进入消息处理函数被处理,或被某个非界面类也就是内部处理类如文档类处理,系统中默认的窗口类和用户注册的窗口类都有进程,都能在内存中创建实在的窗口对象,窗口对象和窗口类接收和处理(千万注意:接收一个消息和处理一个消息是相差甚大的二个过程)发往它或由它主动发往别的窗口进程或OS的消息,修改窗口进程干涉窗口进程对消息的处理过程(而不是接收过程)是可能的(窗口进程只是一段函数),但是如果这个窗口进程属于别人,如系统的窗口类,你将没有源程序进行修改,但却可以用消息重定的技术加以干涉,比如用户自定义的窗口类,用户完全可以自定义它的窗口进程,编写自己的消息泵,实现对消息的重定向,编写用户自己的消息泵属于Win32编程中重定向一个消息的七大技术之一。  简单地说,Windows是由事件驱动的抢占式多任务操作系统。事件驱动是相对于过程驱动而言的,它改变了原来文件的顺序执行方式;Windows既然是多任务系统,就必须能同时处理多个事件,系统为应用程序生成一个消息队列,消息在上面被张贴和发送,应用程序只要从其消息队列中取出消息,然后一一执行就可以了。  现在,我将使用最最基本的范例程序 HelloWin 来说明WIN32 API的运行机制。首先,一个程序一定要有进入点,Win32 App的进入点函数的名称是WinMain,它的原型如下  int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)  hInstance是所谓的实例句柄,它是一个数值,当程序在Windows下运行的时候,它被用来唯一的标示这个程序,虽然用户可能同时运行多个同一个程序,即运行多个实例,我们可以看到,每一个实例都有不同的hInstance值。  hPrevInstance,简单地说就是没用。..它是存在于16位Windows程序中的,在编写Windows 9x/NT/2000 程序的时候,总应该是NULL。  szCmdLine是一个指针,指向一个以0为终结的字串,里面包含传给该程序的命令行参数,如果想要让程序处理命令行,那么这个参数就有用了。  iCmdShow参数是一个数值,指示窗口将如何被显示,这个数值由在Windows下运行该程序的程序所决定,通常是SW_SHOWNORMAL。  接下来是注册一个窗口类,窗口总是从窗口类的基础上创建的,窗口类用以标示处理窗口消息的窗口过程,注册窗口类时使用 RegisterClassEx() 函数,它只需要一个参数,一个指向类型为 WNDCLASSEX 的结构指针。

123下一页>

恒生指数期货开户
鹤山坚美园
建发泱誉

相关推荐