文档详情

DOS Windows 汇编语言 程序设计 教程 课件 第五章 第六章.ppt

发布:2018-05-29约1.64万字共80页下载文档
文本预览下载声明
第六章 Windows 32位汇编应用举例 1.了解Windows下应用程序和DOS下应用程序的异同。 2.逐渐领会消息、句柄、API函数和窗口等概念。 3.深入地了解高级语言实现界面控制、硬件控制等的原理。 4.比较和高级语言如VC++,Dephi等的相似性。 6.1窗口设计程序 Windows 程序中,在写图形用户界面时需要调用大量的标准 Windows Gui 函数。其实这对用户和程序员来说都有好处,对于用户,面对的是同一套标准的窗口,对这些窗口的操作都是一样的,所以使用不同的应用程序时无须重新学习操作。对程序员来说,这些 Gui 源代码都是经过了微软的严格测试,随时拿来就可以用的。当然至于具体地写程序对于程序员来说还是有难度的。为了创建基于窗口的应用程序,必须严格遵守规范。作到这一点并不难,只要用模块化或面向对象的编程方法即可。 例题1 程序运行 显示一个窗口的几个步骤 得到您应用程序的句柄(必需); 得到命令行参数(如果您想从命令行得到参数,可选); 注册窗口类(必需,除非您使用 Windows 预定义的窗口类,如 MessageBox 或 dialog box); 产生窗口(必需); 在桌面显示窗口(必需,除非您不想立即显示它); 刷新窗口客户区; 进入无限的获取窗口消息的循环; 如果有消息到达,由负责该窗口的窗口回调函数处理; 如果用户关闭窗口,进行退出处理。 句 柄 我们程序的第一条语句是调用 GetModuleHandle 去查找我们应用程序的句柄。在Win32下,应用程序的句柄和模块的句柄是一样的。您可以把实例句柄看成是您的应用程序的 ID 号。 命令行参数 如果您的应用程序不处理命令行那么就无须调用 GetCommandLine,这里只是告诉您如果要调用应该怎么做。 注册窗口类 一个窗口类就是一个有关窗口的规范,这个规范定义了几个主要的窗口的元素,如:图标、光标、背景色、和负责处理该窗口的函数。您产生一个窗口时就必须要有这样的一个窗口类。如果您要产生不止一个同种类型的窗口时,最好的方法就是把这个窗口类存储起来,这种方法可以节约许多的内存空间。 如果您要定义自己的创建窗口类就必须:在一个 WINDCLASS 或 WINDOWCLASSEXE 结构体中指明您窗口的组成元素,然后调用 RegisterClass 或 RegisterClassEx ,再根据该窗口类产生窗口。对不同特色的窗口必须定义不同的窗口类。 WINDOWS有几个预定义的窗口类,譬如:按钮、编辑框等。要产生该种风格的窗口无须预先再定义窗口类了,只要包预定义类的类名作为参数调用 CreateWindowEx 即可。 WNDCLASSEX 中最重要的成员莫过于lpfnWndProc了。前缀 lpfn 表示该成员是一个指向函数的长指针。在 Win32中由于内存模式是 FLAT 型,所以没有 near 或 far 的区别。每一个窗口类必须有一个窗口过程,当 Windows 把属于特定窗口的消息发送给该窗口时,该窗口的窗口类负责处理所有的消息,如键盘消息或鼠标消息。由于窗口过程差不多智能地处理了所有的窗口消息循环,所以您只要在其中加入消息处理过程即可。 消息是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。 消息本身是作为一个用MSG命名的结构传递给应用程序的,这个结构中包含了消息的类型等信息。其定义如下: MSG struct Hwnd dword ? ;消息目的窗口句柄 Message dword ? ;消息常量标识符,是用WM_开头的预定义常量 wParam dword ? ;32位消息带的参数1 lParam dword ? ;32位消息带的参数2 Time dword ? ;消息创建时的时间 Pt POINT ;消息创建时的鼠标位置 MSG ends WNDCLASSEX STRUCT DWORD ? cbSize??????????     DWORD????? ? ? Style DWORD????? ? ? lpfnWndProc DWORD????? ? ? cbClsExtra      DWORD????? ? ? cbWndExtra?????? ? DWORD????? ? ? hInstance???? ???
显示全部
相似文档