我制作了一个带有c++内核的桌面操作系统,可以打印"hello world“。我试图在c++中为我的操作系统创建一个GUI (自定义窗口管理器,按钮),但我遇到了麻烦。我看了一个教程:
http://www.osdever.net/tutorials/view/gui-development
是否有任何类型的GUI教程适用于C中的桌面操作系统
附注:没有Linux也没有DOS。只有C标准。
发布于 2012-01-23 12:12:37
我的建议是仔细研究已经存在和过去已经存在的GUI系统。看看他们的API,试着找出它们在下面是如何工作的。Alex's answer给出了一个很好的总体起点,但并不是所有的环境都以完全相同的方式工作。一定要看看他们的建筑。它们是客户机/服务器,还是单块的?应用程序是如何与他们沟通的?一旦您了解了所有这些,就可以开始设计您的系统了。找出您的窗口管理器/app server/x服务器的等效位置,构建通信通道并开始编码。弄清楚所有这些组件都需要如何与内核对话--这是非常重要的。
与内核开发不同,在内核开发中,除非您是非常激进的,否则您几乎可以肯定构建的东西看起来有点像unix或VMS,但是为了方便起见,minix和mach的元素混合在一起,构建GUI框架要复杂得多,有许多不同的变体,这可能就是为什么没有那么多好的教程。
我个人的灵感来自BeOS。我喜欢他们的做法,所以我复制了它,尽管和任何东西一样,你也需要看看他们犯的一些错误,尽量不去模仿它们。BeOS犯了相当大的错误。
发布于 2012-01-22 23:50:10
我不认为你需要特别的指导。最基本GUI的核心是管理表示窗口、按钮、图片、文本框等的矩形对象列表。
每个矩形物体都有它的x和y坐标和尺寸(宽度和高度)。它还有一个z(深度)坐标,它告诉在它下面的物体(它们的z更小)和上面的物体(z的更大)。
每个矩形对象都有一个指向其父对象和其子对象的指针。这使得它很容易组成任意复杂的窗口更小和更简单的rect。对象。例如,当您抓取一个窗口并移动它时,可以使用这些父/子指针移动所有对象。或者,如果外部对象接收到一个事件,它可以将其转发给其内部子对象以进行处理,反之亦然。
当涉及到呈现所有这些矩形对象时,其中一些可以被其他对象部分或完全模糊,最重要的是找出哪些对象是可见的、不可见的和部分可见的,因为您不想做很多不必要的工作。要有效地绘制对象,您需要最多一次(总是或大多数时间)绘制每个像素。除了所需的矩形相交/细分代码外,这还表明每个对象都知道如何高效地绘制任意矩形部分。这对于实色物体来说是最微不足道的.对于图片,它或多或少是简单明了的(除非您希望在适当的地方进行图像缩放和颜色还原/转换)。对于文本和向量对象来说,这是最困难的。
您甚至可以将鼠标指针对象从小矩形对象中合成出来,并将其用与所有其他对象相同的代码绘制和重新绘制。只要确保指针的z(深度)坐标是这样的,指针总是在所有其他对象的顶部。
这就是一般的想法。
https://stackoverflow.com/questions/8965128
复制相似问题