放在今天,我要录的视频几乎不具有学习的意义,如果想学习技术,可以学Python,Java,JS等。如今,,虽说只要windows存在一天,win32(有可能)就不会消失,大量的软件如Office,杀毒软件,大部分开机后弹广告的软件,仍旧使用win32开发。但是,现在都进入手机时代了... 毕竟我已经是个36岁的程序员了,哪还能跟得上年轻人摩擦摩擦,似魔鬼的步伐呢?权当以后考古使用了。
这系列的视频要从零开始做一个坦克大战,用的技术是:C语言,Win32编程,还有GDI。C语言没什么好说的,win32也没什么好说的,GDI么,为什么不用DirectX呢?这个... 我是本着什么低级用什么,什么复杂用什么的原则来写这个小游戏的。DirectX还是太"游戏"了,也太"高效"了,没有GDI来的粗暴,来的原生态。
『用别人的引擎?这个提议吼不吼?』我觉地不吼!不管大家大家滋瓷不滋瓷,我是不滋瓷地!
一切将将开始...
我们玩视频游戏的时候,面对的实际上是一个窗口,这个窗口可能是全屏的,也可能是只占据屏幕的一部分。
当我在学习C语言编程的时候,一直困扰我的问题是:按照书上学习的C语言和在Windows上用C语言和Win32编程有什么不同。这个问题真的困扰了我很长时间,也许是智商的问题,不够聪明。我总是感觉纯粹的在课本上的C语言和在Windows上的C语言有很多的不同。
我打开一个虚拟机,里有我安装的各种已经被时代抛弃的古老的操作系统。当我没事的时候,总是会打开这些系统,玩一下,其实,我个人认为,电脑真正的进化只有再次,一次是从实模式到386的保护模式的转换,另一次是从字符模式到图形模式的转换,对大部分人来说,也就是从DOS到Windows的转换。第一个巨大的转换,我没有经历过,我没有在实模式下写过程序。第二个转换,从DOS到Windows的转换,我只经历了一个最后的时期,我用DOS的时间非常的少,大部分时期都是Windows。但是,大学时期学习C语言是在DOS上完成的,学校的机房里,只有几台可以运行Windows的机器,一上机,那几台机器就被抢完了,我又不太善于抢,所以,每次都是用DOS。
困扰我的这几个问题分别是:第一,在字符编程环境下的C语言和Windows图形环境下的编程为什么总是感觉不相同;第二,图形化的编程为什么理解起来变难了?当然,这只是困扰我的很多巨大的问题中的几个,在思考了很久以后,我觉得从根本上来说,这是个社会分工的问题,而不仅仅是个技术问题。
其实从286开始,CPU已经有了保护模式。之所以叫保护模式,是因为大家总是想让电脑同时干几件事情,同时干几件事情,这几个软件却需要使用同一台电脑的资源,这样就需要把这些资源保护起来,不能因为一个软件,比如一个听歌软件错误,就让整个系统挂了。但是,Intel的286这个CPU,在硬件上并不能完全支持,所以,微软的Windows 3.0是不能很好的支持保护模式的,经常出问题。(这些东西都是书上写的,我实际上并没有见过286的机器)但是,等到386的时候,微软的windows 3.1就已经可以比较可靠的支持386的保护模式。在这个时期,微软和Intel的联盟从此成型,然后开始了一段波澜壮阔的时期,这两个公司简直了,把几乎所有的软件和硬件厂商变成了打工的。
Windows 编程还有一个不同是Windows这个窗口还要处理和传递消息。打开Dos,还有ssh到Linux上,再打开一个windows 3.1。如果一个程序只有在命令行下操作,那么在Linux下和在DOS下的逻辑是没有太大区别的。但是,Windows之所以叫Windows,就是因为有这个Window啊,窗口。几乎所有的应用程序,包括游戏,都要通过一个窗口和用户进行交互。我们做的游戏也好,软件也好,少不了和窗口打交道。
现在大家都用手机了,其实手机的界面,和Windows 3.1时候的界面逻辑,并没有巨大的变化。所以,图形用户界面的知识,到现在为止还没有完全落后,由于现在IDE的更加强大,实际上,编程变得更简单了。下一代的操作逻辑还没有出现,到今天为止,还是GUI。下一代和电脑的交互可能是人工智能,比如你很生气,狠狠的瞪手机或者电脑一眼,他就吓的自动关机了。以我来看,这才是真正改变世界的下一代技术,眼神交互。眼神交互在现实中非常的常见,比如眉目传情,比如道路以目,都是眼神交互,而且意味深长。但是现在还没有实现用眼神和手机交流。
在DOS命令行或者Linux命令行的情况下,是不能通过鼠标和操作系统交互的,只能通过键盘来和OS交流。但是Windws 3.1以后,包括现在的手机,都是可以和鼠标交互的,对触屏手机来说,鼠标就是手指头。
大家都知道,Windows的窗口是可以调整大小的,智能手机旋转后,很多App的布局会发生相应的变化,那么,是谁来处理的这些信息呢?在我们用鼠标拖住一个窗口调整大小的过程中,肯定会产生很多的信息,这些信息是由谁来处理呢?答案是由操作系统来处理。
那么这个记事本如何就知道我们对他的大小进行了调整呢?是操作系统告诉他的。当我们的手动一下,操作系统就获得了这个信息,然后再通知这个记事本,用户放大了还是缩小了,连鼠标的位置也告诉他。这和给DOS或者Linux命令行写软件有很多的不同。这也是理解Windows编程或者手机编程的关键所在。在DOS下,我们要调用DOS的API,在这里,反过来了,成了Windows调用我们写的一个功能,我们写的软件在等待操作系统的调用。
比如打开文件,我们就调用操作系统提供的一个功能就可以了,这个非常容易理解。但是,操作系统调用我们写的功能,这个就不太容易理解了。在Windows中,这个过程有个名字叫做窗口过程。