好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

吉林大学远程教育35.ppt

35页
  • 卖家[上传人]:hs****ma
  • 文档编号:590423049
  • 上传时间:2024-09-14
  • 文档格式:PPT
  • 文档大小:313.60KB
  • / 35 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 吉林大学远程教育课件Windows A P I编       程主讲人主讲人 : 翟慧杰翟慧杰学学 时:时:48(第四十七讲第四十七讲)  尽管Delphi具有上述所介绍的强大功能,但是它也离不开Windows API这个基础在Delphi中使用Windows API进行程序设计,与Visual C+十的不同之处仅在于C+十与Object Pascal这二者之间的语法差别而已14.2.2 Delphi开发 Windows API应用程序的步骤下面以 Delphi 5为例,介绍在Delphi中如何实现基于 Window API的程序设计    首先,单击  File菜单下的  New命令,这时将弹出如图14- l所示的对话框   在图 14-l中,选择 Console Wizard图标,然后单击 OK按钮,这时,  Delphi的主界面如图12-2所示 从图 14-2可以看出, Delphi的对象监视器为空,也就是说,当前应用程序没有使用到表单和其他的可视化组件事实上,这时Delphi为用户只生成了一个项目文件,而没有生成相应的单元文件,这和基于Delphi可视组件库的应用程序是有一定差别的。

          在图14-2的源文件编辑器中编辑自己的基于Windows API的程序源码,完成后,编译运行即可,这一步和Delphi中基于可视组件库的应用程序是一致的14..2..3 Windows AP在在 Delphi中的应用实例中的应用实例    下面是一个在 Delphi中采用 Windows API进行程序设计的一个实例例 12-1】基于 Windows API的 Delphi应用程序    该程序是一个用 Windows API编写的简单的应用程序,主要用它来说明如何在 Delphi中调用 Windows API函数,如何设计基于 Windows API的应用程序     由于使用的是Windows API和消息循环来构造应用程序,因此在程序中的uses部分包含了Windows 和Messages两个单元uses子句和Visual C+十中的include很类似,其功能也是为了应用程序能调用在某个文件中定义的函数和常量在 Delphi中,所有的Windows API函数的原型和数据结构及常量的定义均保存在Windows和Messages这两类文件中在 Delphi的 Lib目录下可以打开这两个文件,其文件名分别为 Windows.dcu和Messages.dcu,用户可以从这两个文件中获得准确的函数原型、数据结构和常量的定义。

          程序中定义了一个全局变量wClass来代表最终的窗口这个变量是TWndClass类型的,TWndClass实际上是一个结构体,它是 Visual C+十中的 WndClass在 Delphi中的实现通过对这个结构体变量的各个域进行不同的设置,可以获得不同的窗口风格和界面特征在程序中可通过如下语句实现对wClass变量的初始化: 上述程序不论是在功能L还是在实现方式上和 Visual C+十中对 wClass进行的初始化都是类似的例如,指定hCursor域的值时,在上述程序中是通过调用API函数LoadCursor来实现的,其中指定的光标标识符IDC ARROW是在Windows系统中预定义的箭头光标不过,由于  Delphi用的编程语言是  Object  Pascal,因此在指定 IpfnWndProc时,不仅仅需要指定窗口函数的名称,而且必须在其前面添加一个“@”号,这个号表示传递给lpfnWndProc是窗口函数WindowProc的人口地址    在完成对变量wClass的初始化之后,接下来应该对窗口类进行注册,这个功能是通过调用函数RegisterClass来实现的。

          在完成对窗口类的注册后,就可以调用函数CreateWindow来创建窗口,程序中对CreateWindow函数的调用如下: 其中,参数 Sample Class用于指定生成窗口的窗口类的名称,也就是通过 RegisterClass函数注册的用户自定义的窗口类如果CreateWindow函数执行成功,则返回新建的窗口句柄并将这个句柄赋值给全局变量Handle这里的窗口句桶和Visual C+十中的窗口句柄的含义是完全一致的    程序中除了创建主窗口外,还通过调用CreateWindow函数创建了两个按钮、一个编辑框和一个静态文本框窗口类型都是由Windows系统预定义的,所以不用再注册就可以直接使用这些窗口又被称为子窗口,因为它们是隶属于一个父窗口的,在这里就是隶属于由句柄Handle标识的窗口正是这些子窗口构成了和用户进行交互的界面    在本程序中,还通过调用API函数CreateFont创建了一个字体,程序中对CreateFont函数的调用如下: CreateFont函数的参数比较复杂,每个参数描述字体的某一个属性,CreateFont的功能就是用指定的字体属性创建一种字体。

      创建的字体由CreateFont返回的字体句柄来标识,例如,在向按钮 Encrypt发送  WM-SETFONT消息的同时,把  hFont作为  SendMessnge的wParam参数,实现将按钮Encrypt中的标题字体设置为上述程序中新建的字体    SendMessnge用于向各个窗口发送消息,例如,上面的设置字体的消息就是通过如下语句发送的: 上述语句将所有子窗口标题的字体都设置为由CreateFont新建的字体    为了实现消息处理,程序中首先调用函数GetWindowLong,取得了Encrypt按钮的默认消息处理函数的入口地址,然后把这个地址转换成指针类型,并把最终的值传递给dEncrypt变量再调用函数 SCtwilldOWLOflg给 EllCrypt按钮指定由用户定制的消息处理函数的人口地址    在调用函数SetFocus把默认的焦点置于Encrypt按钮之上后,主程序就进入了消息循环在Delphi中的消息循环如下: 其中,函数GetMessage用于从操作系统的消息队列中获得消息,然后通过函数TranslateMessage对消息进行翻译,最后通过函数DispatchMessage把所有的消息分发出去。

      只有当消息循环接收到一条 WM-NESTROY消息时才会结束    主窗口的消息处理函数如: 其中,消息处理函数的参数列表和Visual C+十是一致的,但是在参数的数据类型上有一些细微的差别,在 Delphi中四个参数的类型都是 Longint    和Visual C+十中的消息处理类似,在Delphi中也是通过一个大的分支结构来实现对不同的消息进行不同的处理例如,当窗口接收到 WMSIZE消息时,就调用 Resize函数对窗口进行重画Resize是自定义的一个函数,其完整的定义如下:  其中,定义了一个用于描述当前窗口所占据的区域的TRect变量RCT,函数GetWindowRect可以获得窗日当前所在的矩形区域,MoveWindow可以使窗口移动,事实上,调用MoveWindow函数的目的是为了当窗日大小发生改变时还能保持窗口中按钮、编辑框等界面元素的相对位置    用户单击窗口中的某一个接或将触发一条WM-COMMAND消息,同时在IParam参数中将记录下触发消息的组件句柄例如,当用户单击Encrypt按钮时,消息处理函数就通过对IParam参数的判断,发现消息来自于Encrypt按钮,于是就调用函数Encrypt加以处理。

      Encrypt函数是自定义的一个函数,其完整定义如下: 在Encrypt中,实现对文本框中输入的文本进行加密其核心语句是:其中,函数Ord用于取得某一个字符的ASCII码,然后再加上来自密码框中某一个字符的ASCII码,将相加的和赋给原来的字符单元,这样显示出来的文本和最初的文本就不一样了函数Ord的原型定义如下所示:关于Ord函数的使用还可以参考下面的例子: 函数GetMem和FreeMem分别用于为字符串分配内存和释放内存;函数GetWindow Text和setWindowText分别用于获取和设置编辑框中的文本    与加密类似,如果用户单击了Decrypt按钮,则调用函数Decrypt来执行相应的解密操作通过减去密码框中相应字符的ASCII码就可以恢复文本框中的文本实现解密功能的核心语句如下: 在关闭应用程序时,程序中调用shutDown来完成所有的善后事宜函数shutDown的完整定义如下: 由于句柄是一种系统资源,因此在关闭应用程序时,应该删除hFont句柄并注销对Sample Class的注册  ExitProcess是一个 API函数,这个函数用于结束当前进程。

      编译并运行上例,用户将得到如图12-3所示的应用程序主窗口  单击 Encrypt按钮,则编辑框中的文本将被加密,如图 12-4所不    当然,用户单击按钮  Decrypt,相应的文本将会被解密,重新得到如图12-3习中所示的文本 14.3  Windows API与C++ Builder    可以说,基于图形界面的Windows系列操作系统的推出是计算机真正进入各个应用领域的一个具有里程碑意义的事件    在Windows取得了巨大的成功的同时,广大程序员也必须面对一个问题,那就是开发基于Windows的应用程序Windows操作系统的一个核心思想就是图形界面的思想,通过为用户提供一个基于图形的,而不是基于字符串命令的用户界面,同时为了减轻用户在操作上的困难,提供的图形界面中也尽可能地采用一致的图形界面元素,例如对话框、按钮、菜单等均采用统一的风格,提供一致的外观    深入了解Windows API的好处在于可以有助于理解C++Builder和操作系统是如何工作的如果理解了创建Windows程序的核心技术,那么就可以从这些信息中获得C++Builder的工作原理,以及它能做什么,它不能做什么。

      许多人使用C++Builder,是因为C++Builder可以在相对轻松的情况下较快捷地建立复杂的应用程序这是C++Builder的一大优点但是如果要真正创建一些强有力的程序或者组件,那么仅仅了解高级工具显然是不够的,还应该了解C++Builder是如何实现和Windows进行交互的,在Windows底层是如何实现的?这里介绍的关于C++Builder中如何进行 Windows API程序设计的内容希望能为读者朋友理解上述问题提供一点帮助但必须指出的是, C++Builder能通过 Windows API进行程序设计,但是这并不是C++Builder的强处基于VCL并结合Windows API等多种手段才能充分发挥C++Builder的编程能力,并编写出高质量的应用程序来 12..3..1 C++++Builder开发开发 Windows API应用程序的步骤应用程序的步骤    C++Builder是Inprise开发的Delphi的姊妹产品,因此C++Builder无论是在界面特征还是在功能实现上都和 Delphi非常类似在开发基于 Windows API的应用程序的步骤上,两者也是非常相似的。

          当启动C++Builder后,单击File菜单下的New菜单项,这时将弹出如图14-5的对话框 在这个对话框中,选择 Console Wizard,然后单击 OK按钮,这时将得到如图 12-6所示的C++Builder运行界面  在图14-6中, C++Builder自动为用户生成了一个Windows API应用程序的框架,如自动将头文件windows.h包含进项目中,自动生成的WinMain函数等用户可以直接在此基础上开发自己的 Windows API应用程序 12..3..2 Windows API在在 C++++Builder中的应用实例中的应用实例    由于  C++Builder的编程语言是  C++,因此,通过C++Builder开发Windows API应用程序和通过Visual C+十开发Windows API应用程序在语法上、结构上都是非常类似的事实上,在C++Builder中开发的基于Windows API应用程序在Visual C+十中也能编译运行,在 Visual C+十中开发的 Windows API应用程序在 C++Builder中也能编译运行。

          下面是使用C++Builder开发的一个简单的Windows API应用程序,该程序将显示一个窗口,并在该窗口的客户区中用蓝色、绿色和红色三种画笔画线  【例 14-2】 Windows API在 C++Builder中的应用    程序中首先对窗口消息处理函数WndProc、窗口初始化函数InitWindows的原型进行声明然后定义一个全局变量hWndMain记录主窗口的句柄    例14-2的WinMain函数、InitWindows函数和前面介绍过的几乎相同,这里就不赘述了    下面重点分析一下程序是如何实现绘制直线功能的    在消息处理函数WndProc中,首先定义了红、绿、蓝三支逻辑画笔,然后在对窗口进行重给时,通过 CreatePenIndirect函数创建逻辑画笔实例,通过 SelectObject函数选择不同的画笔到设备描述表中就可以实现绘制不同颜色的直线    绘制直线之前,程序先调用函数MoveToEx将画笔移动到直线的起点,然后通过调用函数LineTo绘制一条直线    因为画笔句柄耗费系统资源,所以在结束绘画后,必须调用 DeleteObject函数销毁画笔实例。

         程序经编译后的执行结果如图14-7所示  5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8JbNeQiTlWo#r%u(yJbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4FbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!tA2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfVmYq!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IahTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRiUmXp!s&v)z4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!w-A1D4G8JbNeQhTlWoZr 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.