Chinaunix首页 | 论坛 | 博客
  • 博客访问: 605896
  • 博文数量: 263
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 2555
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-26 11:20
文章分类

全部博文(263)

文章存档

2011年(10)

2010年(19)

2009年(170)

2008年(64)

我的朋友

分类: WINDOWS

2009-10-16 03:07:47

序:去年为了总结自己所学习/接触过的技术,也顺便为初学者少走弯路指明一些方向,可惜后来诸事缠身未能继续,十分遗憾,现放到自己的BLOG上来鼓励自己将此继续下去。

  "Win32编程”
   很不幸,我从开始学习编程到理解这个名词中间隔了很长的时间(上个世纪的学习环境可见一斑)。很长时间里我都不明白32是指什么,我用过 Dos,Win31,win95,win97...但好像没用过名为Win32的操作系统啊?很久以后我才知道,32在这里并不是指操作系统的版本号,而 是指32位。微软操作系统在win31及其以前都是DOS系统,windows只是在dos下运行的一个大程序而已。在其后win95则稍有改 变,windows除了DOS核心以外也真正成为了操作系统的一部分,提供着各类操作系统提供的服务。应该说,在win95之后的windows(新近的 64位win系统以前)都可以称之为win32系统平台(95/98实际上是16与32位混合)。所以在这样的平台上,直接或间接使用系统提供的API编 程,就称之为Win32编程。对Visual Studio而言,Win32编程一般指SDK、MFC、ATL这几类开发方法,其中ATL在国内应用不是很广泛,一般应用于以COM组件为架构的中大型 软件产品。

  "SDK" :Software Development Kit,常译为软件开发(工具)包
  在Win32编 程领域一般指与MFC这类框架编程相区别的,直接调用Windows提供的API的开发方式,与字面原意有一些区别。另外一个经常见到的说法就是某软件 (硬件)带有自己的一套SDK,这里其实一般是指一套API库函数或者类库,供上一层的开发者调用。又譬如常说的DX的SDK,其实是微软开发的一套 COM组件,供上层开发者使用。总之,供程序员使用的比较完备的代码库,就可以称之为SDK;

  “MFC”: Microsoft Fundation classes 微软基础类库
   大家都知道,使用SDK编程方式往往有很多每次都重复的固定不变的一些代码,为了提高编程的效率,减少上千个API带给开发人员巨大的精神压力,微软开 发出了这么一个类库,注意,这个类库与操作系统本身无任何关系,它只是对API进行了一个面向对象的封装,当然,还给出了一系列编程的框架。使用SDK的 方法,使用Visual Studio,通过调用Windows API,MFC你也可以做得出来。MFC把一些固定不变的代码已经写好了,只在编译时候链上,所以我们的代码里看不到WinMain(),而事实上整个程 序的运行,和SDK的方式无任何区别,初学者请记住这一点。另,补充一点个人感想,MFC的初衷,带给开发人员更多的便利,我觉得并不太成功。学习MFC 所费的力气和最终的所得,并不太成正比。

  "API":Application Programming Interface,应用程序接口
  这个词的出现频率很高,从某种意义上来说,也可以看作是SDK的一个子集。这也是做给程序员的程序,不过一般指用导出函数的方式提供服务的函数库,不包括类库和组件。

  “GDI”:Graphic Device Interface,图形设备接口
   这个是Win32程序下最常用的显示方式,与DirectX、OpenGL处于同一级。在DOS要显示一些东东可不是容易的事,最简单的是调用一些C的 图形库函数来实现显示,不过一般也就是些画线,填色,输出几个文字,效果很弱(所以DOS程序界面一般都不怎么样,且实现起来不是一般的复杂),要复杂一 点的动画/图片显示什么的,经常要用到的就是硬件中断,调用一些显卡自身的子程序(固化在显卡内的)来做。因为每一个显卡都不同,所以DOS的游戏兼容常 常由于显卡的差异而很糟糕。到Windows下大家就幸福多了,Windows将硬件这一层屏蔽起来,用一个表格(Device Context)来代表一个显示,我们要做的就是在这个表格上填好相关参数,然后画上我们想画的东东,然后操作系统会依照这个表格(DC),把相应的显示 内容(一般是一块显示内存)传送到指定显卡的指定的显存,再由显卡传给显示屏。我们不再需要与不同的显卡打交通,这是一个十分伟大的胜利!GDI中最常用 的是双缓存技术,就是说你可以在内存中创建(也就是复制)一个DC,只不过在这个DC中显示的不再被传送到显示器上。有什么用呢?因为它的各参数是与当前 屏幕DC一致的(COPY嘛 ,当然是这个结果),所以它的显示内容可以完整无失真地传送到屏幕DC上。我们通常在内存DC上画图,譬如画一圆,再画一条直线,画完后一次性地传送到屏 幕DC上,这样对用户来说屏幕只刷新了一次,可以解决你画一点内容屏幕即刷新一次导致的闪烁问题。当然,双缓冲甚至多缓冲还有很多别的用处,那就要靠自己 揣摩了。
阅读(437) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~