Cod*_*404 4 user-interface operating-system kernel osdev
我用c中的内核创建了一个桌面操作系统,打印出"hello world".我正在尝试为我的操作系统制作一个GUI(自定义窗口管理器,按钮),但我遇到了麻烦.我看了一个教程:
http://www.osdever.net/tutorials/view/gui-development
是否有适用于C桌面操作系统的GUI教程?
ps没有Linux,没有DOS.只有C标准.
我不认为你需要一个特殊的教程.最基本的GUI的核心包括管理表示窗口,按钮,图片,文本框等的矩形对象列表.
像这样的每个矩形物体都有x和y坐标和尺寸(宽度和高度).它还具有az(深度)坐标,用于指示其下方的物体(它们的z较小)以及物体在其上方(它们的z更大).
每个矩形对象也有一个指向其父级及其子级的指针.这使得组成更小和更简单的rect的任意复杂窗口变得容易.对象.例如,当您抓住窗口并移动它时,使用这些父/子指针可以移动所有对象.或者,如果外部对象接收到事件,它可以将其转发给其内部子项以进行处理,反之亦然.
当渲染所有这些矩形物体时,其中一些可被其他物体部分或完全遮挡,最重要的是弄清楚所有物体中哪一个是可见的,不可见的和部分可见的,因为你不想这样做很多不必要的工作.要有效地绘制想要最多一次绘制每个像素的对象(总是或大部分时间).除了需要的矩形交叉/细分代码之外,这还表明每个对象都知道如何有效地绘制自身的任意矩形部分.这对于纯色物体来说是微不足道的.对于图片来说,它或多或少是直截了当的(除非您想要进行图像缩放和颜色缩减/原位转换).对于文本和矢量对象来说,这是最难的.
您甚至可以用小矩形对象组合鼠标指针对象,并使用与所有其他对象相同的代码绘制和重绘它.只需确保指针的z(深度)坐标使得指针始终位于所有其他对象之上.
这是一般的想法.
我的建议是努力研究已经存在并且过去存在的GUI系统.查看他们的API,并尝试弄清楚它们是如何工作的.Alex的回答给出了一个很好的通用起点,但并非所有环境都以完全相同的方式工作.一定要看看他们的架构.它们是客户端/服务器还是单片机?应用程序如何与它们通信?一旦理解了所有这些,就可以开始设计系统了.找出窗口管理器/ app server/x服务器等效的位置,构建通信通道并开始编码.弄清楚所有这些组件是如何与内核通信的 - 这非常重要.
与内核开发不同,除非你真的很激进,否则你几乎肯定会构建一些类似于unix或类似于VMS的东西,但为了方便起见,混合了minix和mach的元素,构建GUI框架会更加复杂不同的变化可能是为什么没有那么多好的教程.
我个人的灵感来自BeOS.我喜欢他们这样做的方式,所以我复制了它,尽管你需要查看他们所犯的一些错误,并尽量不要复制它们.BeOS有相当多的错误.