当前位置:C++技术网 > 资讯 > Windows零基础入门:1.2 什么是Windows编程

Windows零基础入门:1.2 什么是Windows编程

更新时间:2015-07-19 12:30:06浏览次数:1+次

    阅读本文前,请阅读:第一节:什么是Windows?

    说起这个,让我想起当初学习Windows编程前的时候。我是一个完全自学者,没有人指导的,不懂就只能上百度查。自学当初,什么都不懂,也查不清楚自己需要什么,一切都稀里糊涂的。
    那时候,学了C语言,也能够熟练使用C语言了,做了一个计算器程序,还有各种程序,都是小程序咯。就是好让自己锻炼一下,所以自己想了各种小程序来写,一个个实现。在写计算器的时候,我知道Windows操作系统里自带一个计算器,挺方便的。然而我写的是控制台的计算器,写好了给同学们玩玩,他们说怎么是这么奇怪的东西呢?怎么不是平时用的那种呢?我很受打击,因为我不知道怎么去写那样的程序,身边也没有人问,我也不知道要问什么,所以也不懂怎么查。

Dos窗口
    事实上就是这样的,当你不知道一个东西的时候,怎么查都查不到,而当你知道是什么东西的时候,随便一查,遍地开花的资料呀。不知道你是否有同感。所以说,当你查不到想要的资料的时候,请冷静下来,先想想自己到底要查什么,想得差不多了,就去试试。这样不会和无头苍蝇一样乱窜。
    后来,选了公选课Java编程,学来学去,和C语言一样的东西。因为讲的是很基础的东西,然后讲的面向对象的思想。我是学过C语言的,所以,对此就有点不满了。去问老师,什么时候教写界面的东西,老师说,界面那些东西很简单,等我们学完了基础,有时间再讲。然而到了最后,还是没有讲,因为没有时间。课程的重点也不是界面,而是基础的语法。我承认,对此,我很失望。
    虽然很沮丧,然而并没有让我放弃,我依然坚定的再次去查阅资料。不知道后来怎么的就找到了VB。学到后面,发现用的是VB.NET。这次,确实真的就是想要的界面了。那段时间,也花了一些时间研究了一下。说研究吧,也没有去学习VB的语言,就简单的几个语法,就是关键词不一样,然后不清楚的百度一下。反正,C语言很熟,编程的逻辑基本一样,只是关键词有所不同罢了。
    然后,似乎开启了界面编程的旅程一样。好疯狂,找了一个个的想法做成了软件,不断的更新版本。最让我拿得出手的就是完美记事。这也是更新最久,一直在用的软件。里面的功能就是一个个打开脑洞加百度出来的。
    一段时间之后,我发现我依然不懂得什么是界面编程,似乎学了VB还是打擦边球一样。不知道什么时候,接触到了孙鑫的VC++,似乎这就是界面编程。现在来看,这个就是MFC,也不是我们要的界面编程。当然确实可以实现界面编程。后来的后来,接触的信息就一下大了,也记不清楚了,然后就知道了Windows程序设计。当时我很惊讶,还有这样的课程,从来都没有听说过。然后就毫不犹豫的购买了正版的《Windows程序设计》,160元,一分不少。我并不心疼这些钱,买到这些书,让我如获至宝,那种心情不知道你都懂不懂呢?

        Windows操作系统
    到现在为止,对Windows编程已经有了比较深入全面的了解,所以,我也就可以比较容易的给大家说清楚到底什么是Windows编程?什么是Win32编程?什么是API编程?以上说那么多,你觉得对你是一种鼓励还是浪费时间呢?那些就是我探索编程的一个复杂而漫长的过程,这些文字并不能完全描述其中的艰辛,下面我为你揭开这个面纱,让你不再迷惑。
    前一节讲过,什么是Windows?已经大概的介绍了Windows的事情。那么我们学习的是Windows编程,和前一节有什么不同呢?
    我们接触编程,一般都是C语言,然后是C++语言。其他语言我就不说了。学完C语言和C++语言之后,你往往会发现,我会编程了,然后,学会的编程总是黑窗口,与平时用的软件不一样,你也不知道如何去写窗口程序。有些人费劲脑子,竟然在黑窗口画画,这个我现在也不太明白如何实现的。反正用不着也没去研究。
    Windows操作系统,就是基于窗口界面的,也就是我们现在看到的系统的样子。这个术语叫做GUI,即Graphic User Interface的缩写,叫做图形化用户接口,就是图形化的界面了。也就是说,Windows中的各种图形元素,就是Windows的基石。只要我们做Windows编程,那么要写出Windows的界面那就是再简单不过的了。因为我们只是用Windows的基石去堆砌Windows程序而已。而如果只用C语言或者C++语言,那是不可能的。最多就像前面说的在控制台窗口画画而已。而我们的Windows编程,就是使用Windows提供的各种图形元素集成的小窗口来布置程序界面,然后在内部写代码改变程序的界面的小窗口的各种样子,比如窗口大小、窗口位置、文字和颜色等等。一些预先设计好的小窗口,就是常常说的Windows的控件。
    Windows是一个操作系统,也就是说,Windows编程是在系统级别来编程的,这个不像C语言和C++语言里的编程,语言里的编程就是学习的编程逻辑,如何控制程序的流程等。Windows编程就是让你操作Windows操作系统的东西的编程。而你要操作操作系统,实际就是间接的操作电脑的各种硬件。你要显示窗口,显示文字和图片,其实就是间接操作了电脑的显卡。只有操作了显卡,才能让显卡输出要显示的数据。当然,也是要操作屏幕来显示的。然而,这一切都是操作系统帮我们完成的。
    第一节说的,我们使用Windows是在系统上点击鼠标之类的操作,操作系统就可以理解我们要做的操作,进而来管理硬件。Windows编程则不一样。Windows编程实际上是给我们提供了另外一个使用操作系统的途径,叫做编程接口。普通的用户使用Windows叫做图形命令接口。图形命令接口就是你在界面上的各种操作都会转换成命令给系统,系统来执行命令的过程。而编程接口就是操作系统提供一系列的函数给我们的程序使用,调用这些系统提供的函数,就相当于发了指令。而编程接口的使用可以让我们把这些指令程序化,我们可以在不同的逻辑中执行不同的指令。C语言和C++语言中的就是程序的逻辑,我们就是使用这些编程语言编写逻辑,调用操作系统提供的函数,进而给操作系统发送指令,这样就完成了程序的功能。
    那么,操作系统提供的这些函数,就是我们常说的API函数,叫做Application Programming Interface。Windows编程就是调用这些API函数的过程的编程,而所谓的编程就是写程序的逻辑,先做什么后做什么的过程。这个实际上和什么编程语言没有关系,每一种语言都可以使用API函数。只不过,C语言和C++语言使用最直接,格式都一致。操作系统都是用的C语言和C++语言编写而成的,这也是为什么这两种语言可以直接使用API函数的原因。其他语言可能就需要做一些处理等等了。
    其实还有另外一种方式来执行Windows的命令,那就是Shell命令。这个就类似于Linux的用户命令操作方式了。只不过Shell命令用于直接在Dos窗口写命令,而Shell编程就是将这些命令写在程序里执行,按照程序的逻辑来执行。当然Linux操作系统也是有Shell编程的,并且也是非常重要的。而在Windows中,一般就是用API编程即可。Shell编程在Windows中并不是很常用,偶尔也是可以用的。这个就像,虽然Windows有一个Dos窗口可以供你执行一些命令,而你还是更愿意直接操作图形化的界面。
    总结下,C/C++语言的编程就是学习的是逻辑,实现程序的逻辑。而Windows编程就是用程序逻辑化的执行Windows命令,实现的方式就是调用Windows的API函数,这是执行Windows命令的一种方式,面向程序员的。直接使用Windows操作系统的方式就是GUI,面向小白大众的。另外一种就是Shell的Dos命令方式,这是介于API和GUI方式之间的一种方式,直接发送命令来执行。只不过Shell方式也是可以分为直接在Dos窗口写命令和在程序中发命令。
    还有一种说法,Windows编程又叫做Win32编程。这个也有必要给大家解释清楚。很早的Windows有16位的系统,后来发展很成熟的一个叫做32位的系统。也就是我们现在说的“我的系统是32位的”。把程序编译成32位的,以适合32位的操作系统执行,这个是现在Windows编程的一个最常用的做法。持续了很久,后来大家就把Windows编程叫做Win32编程。似乎一直在强调你写的程序是32位的。而以前16位操作系统就叫做win16编程了。Win32这个叫法就是区分以前的Win16的说法,就是区分一下。那时候16位程序和32位程序都存在,属于一个过渡阶段,才经常要区分一下。而现在是32位系统和64位系统的过渡期,也就出现了Win64编程的说法,只不过现在主流的还是32位的程序。所以Win32编程不要等同于Windows编程哦。
    还要说明一点,软件分不同的位数,操作系统也分不同的位数,只有软件的位数和操作系统的位数一致,执行的效率才是最高的。操作系统的位数高于软件的位数,是可以的兼容的。比如64位操作系统是可以兼容32位软件的,但是32位系统不能执行64位软件。

  64位操作系统
    所谓的位数,对于软件来说,也就是软件被编译成32位的,那么软件执行的每一句指令都是32位的。而操作系统的位数就是,操作系统可以解释的指令是多少位的。如果操作系统可以解释64位指令,那么如果是64位软件,就直接解释了,如果是32位软件,那么还空余32位的位置,就是说32位的指令放不满64位的指令的64个比特位,为了兼容,一般是将32位的指令的高32位填充0了。这样就成了一个64位的指令,实际上就浪费了32位,让执行效率变低了。如果系统是32位,就只能解释32位的指令,那么64位软件的一条指令就超过了32位,因此就无法解释了,就执行不了这个程序了。
    好了,到此本节就结束了,如果还有问题,请留言提问。