开发者社区> 技术小美> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Windows SDK编程(Delphi版) 之 应用基础,楔子

简介:
+关注继续查看
本来是打算将Windows API一日一练,往下讲解的,但是,那个东西貌似又没啥可讲的。不熟悉SDK的编程,那些东西讲了用处也不大,所以,就打算讲讲这个。
   Windows SDK编程,这个东西应该追溯到98时代了。而且如果要学习SDK之类的东西的话,还是去找Win98编程之类的书籍来看,现在的书籍专门讲SDK的基本上没有了,翻到手的都是.net框架,VCL使用那些东西了,对于底层的运作等等,讲解甚少。我这里的所有讲解,都是依托《Win98程序设计从入门到精通》这本书为蓝本进行Delphi版本的讲解。本书用来学习SDK是非常不错的,现在这个书已经绝版了,可以在网上搜搜电子版本的。
   WinMain入口函数
      做SDK开发,每个Windows程序都要有一个入口位置,也就是Windows开始执行的地方。学过C语言的,都晓得,C的入口为main函数,这个与main的效果是一样的,只是他标记了这是Windows程序,也就是说是可以有窗体的。WinMain函数的某些特征注定了他与应用程序的其他函数不同,首先他必须使用WINAPI的调用约定,这个在Delphi中就是Stdcall的约定方式,该函数的返回类型是int类型。
   窗口过程
      用了这么长时间的Windows,或者说学了那么长时间的编程,无论是MFC,还是VCL,都应该知道Windows是通过消息驱动来实现各种操作响应的。这个窗口过程就是专门用来处理各种消息的,所有的消息驱动操作都在本过程中实现。只要一个窗口指定了窗口过程,操作系统就会调用它。每个窗口都有一个默认的窗口过程,如果你不指定窗口过程,系统就会调用它默认的进行消息处理,操作系统通过窗口函数,来接受用户的消息和反馈用户的对应各种消息的操作给系统。窗口函数的返回类型为LRESULT,其实就是一个整数,该函数的返回必须用CallBack标记表示它是一个系统回调函数。典型的一个窗口过程中,包含了对N多消息的处理的,一般是一个很大的Case end 条件结构来针对各种消息进行处理。但是在很多时候,我们不想响应任何消息而仅仅交给系统去处理,这时,我们就可以调用默认的窗口过程处理了。但是这个窗口过程是如何产生出来的呢,那么就有另一个概念产生了,注册一个窗口类,一个窗口类对应着一个窗口过程,这应该也算得上是一个面向对象的方式吧,就是说,比如一个按钮类,他的消息响应处理窗口过程应该是同一个。
   窗口类
      窗口类定义窗口的类型,比如按钮窗口,Form窗口,编辑框窗口等,不同的窗口类有不同的形态外观,和不同的用法也就注定着有不同的窗口过程。
一个Windows程序,一般都有一个窗口,所以开始执行windows程序时,一般会定义并注册一个窗口类(这个不是指Delphi等面向对象中的那个类,而是指样式或者类型哦)。注册一个窗口类的目的是告诉操作系统本窗口的类型外观以及功能,这个窗口类就和前面讲的窗口过程关联起来了。不过注册窗口类,并不是建立一个窗口。注册窗口类,执行在系统内部增加一种窗口样式,以便于以后能够随时通过这个样式来生成一个新的窗口。     
   消息循环

       消息循环式从应用程序的消息队列中取回消息,前面讲过了,Windows是消息驱动的所以,所有的Windows程序内部都要建立一个消息循环,此循环从应用程序的消息队列中读取任何未解决的消息,然后再将它送给Windows,这样Windows就会调用相应的窗口函数来对消息进行处理了。书上说,这个过程的部分原因是想将控制返回到操作系统中,以使调度表能合理的分配CPU时间,而不是等候应用程序时间片的结束。



本文转自 不得闲 博客园博客,原文链接http://www.cnblogs.com/DxSoft/archive/2010/06/07/1753111.html:   ,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring Boot 2.x基础教程:使用 Thymeleaf开发Web页面
Spring Boot 2.x基础教程:使用 Thymeleaf开发Web页面
96 0
dwz4j企业级Java Web快速开发框架(Mybatis + SpringMVC) + jUI整合应用
dwz4j企业级Java Web快速开发框架(Mybatis + SpringMVC) + jUI整合应用
37 0
[基础篇]ESP8266-SDK教程(一)之开发环境搭建
上篇文章我们了解了ESP8266到底是个什么“东西”,了解了ESP8266在这个万物互联时代有哪些优势,那我们不能光是了解,我们还需要去深入的学习一下,争做物联网时代的弄潮儿~继往开来第二篇,本篇文章主要介绍一下几种常见的ESP8266开发方式,感觉现在不管是学习硬件开发还是软件开发,第一节课都是先学习一下开发环境搭建,毕竟这个开发环境不单单是有台电脑就足够了,交叉编译工具链才是最重要的,我们需要将写的代码编译成可以在ESP8266上运行的代码,这一步就需要交叉编译工具。
5025 0
dwz4j企业级Java Web快速开发框架(Mybatis + SpringMVC) + jUI整合应用
版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/78511726 1.获取dwz_springmvc 进入DWZ的CSDN代码库下载地址 https://code.csdn.net/dwzteam/dwz_springmvc/tree/master,点击【下载】按钮将dwz_springmvc源码库下载到本地。
1162 0
《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。 《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明 《连载 | 物联网框架ServerSuperIO教程》- 3.设备驱动介绍   注:ServerSuperIO有可能被移植到Windows 10 IOT上,那么将来有可能开发一套设备驱动,可以支行在服务端、嵌入式设备中,将形成完整的解决方案。
668 0
C# 套接字编程:Scoket,我用Scoket做的C# Windows应用程序如下:
首先请允许我做一个截图: 以上,是我服务端设计 我们知道:服务器端口数最大可以有65535个,但是实际上常用的端口才几十个,由此可以看出未定义的端口相当多。因此,我们可以通过程序随机获取一个当前可用的端口 我将此方法写成了一个类,如下: using System; using System.
983 0
+关注
6819
文章
0
问答
文章排行榜
最热
最新