C语言是怎么实现图形界面的?

想必你问的是windows上用C实现图形界面,另外有些回答说C必须调用库才能实现图形界面。看得出,很多都是没有写过驱动的。首先,我们有一个显示器,显示器是一个个小点组成的。显示器有很多种接口,CPU/GPU通过这个接口(操作寄存器)和显示器通讯,在上面画上一个个点。然后点连成线,点变成圆。。。等等基本图形,把这些封装成函数,加之封装填充之类的函数,构成了最底层的GUI。后面又经过抽象,有图层等的概念。这就是图形库了。然后各种语言调用图形库完成显示。C语言完全可以从底开始写图形界面。但是没必要。

大二微机原理,上机考试就是使用汇编写一个图形输入输出界面,使用BIOS中断来画屏幕上的每个坐标、每个色彩、每个像素……直到现在也忘不了。

你能接触到的显示接口都是别人的库,比如DirectX,OpenGl,GDI,安卓的Canvas,ios的CoreGraphic等。

这个库一般分为两类,一类是面向GPU的操作库,一类是面向图形算法和内存的库。

面向GPU比较典型的就是DirectX和OpenGL.

他们接口偏向硬件,实现比较简单的纹理贴图功能,直白点就是给多个三角形,给纹理,然后显示。你可以拿着其他工具导出的模型(三角形和贴图定义),预先加载特定的纹理之后,作简单移动,缩放等操作。各种矢量变化控制工作由CPU端完成,而数据量较大的纹理贴图由GPU完成。

而GDI或者安卓的Canvas,ios的CoreGraphic是比较复杂的二维图形算法集成库,一般都是在CPU端作很多工作,然后把工作结果以内存帧的方式提交给GPU。这种方式下,CPU和GPU之间的传输带宽,以及你的工作机制非常影响速度。比如,安卓的SurfaceView画整屏会比更新局部的操作慢很多。

C语言实现图形界面可以使用第三方图形库,目前市面上有很多图形库,你可以自行去网上查阅一下,我用图形库是EsayX,支持VC++6.0,VS2008-2019各个版本。

去找本《编码》这书看下。理解显示器原理,开关电路,代码控制开关显示灯这些。

相关代码参考