【问题标题】:Developing a GUI environment in home-made OS在自制操作系统中开发 GUI 环境
【发布时间】:2012-02-16 10:02:41
【问题描述】:

我制作了一个带有 c 内核的桌面操作系统,可以打印“hello world”。我正在尝试在 c 中为我的操作系统制作一个 GUI(自定义窗口管理器、按钮),但我遇到了麻烦。我看了一个教程:

http://www.osdever.net/tutorials/view/gui-development

C 中是否有任何类型的适用于桌面操作系统的 GUI 教程?

附言没有 Linux,也没有 DOS。只有 C 标准。

【问题讨论】:

  • @vines:太粗鲁了,业余开发者可以制作操作系统,每个人都需要资源来学习
  • @CharlesB:在找到这个之前我确实犹豫过:stackoverflow.com/questions/8964440/operating-mouse-driver-in-c 我也想过从更简单的事情开始,但这听起来更残忍,我真的无意冒犯任何人..

标签: user-interface operating-system kernel osdev


【解决方案1】:

我的建议是仔细研究已经存在和过去存在的 GUI 系统。查看它们的 API,并尝试弄清楚它们是如何工作的。 Alex's answer 提供了一个很好的通用起点,但并非所有环境都以完全相同的方式工作。一定要看看他们的架构。它们是客户端/服务器,还是单片机?应用程序如何与他们通信?一旦你理解了所有这些,你就可以开始设计你的系统了。找出您的窗口管理器/应用程序服务器/x 服务器等效的位置,建立通信渠道并开始编码。弄清楚所有这些组件也需要如何与您的内核通信 - 这非常重要。

与内核开发不同,除非您非常激进,否则您几乎肯定会构建一些看起来有点像 unix 或有点像 VMS 但为了权宜之计混合了 minix 和 mach 元素的东西,构建 GUI 框架更重要很复杂,有很多不同的变化,这可能就是没有那么多好的教程的原因。

我个人的灵感来自 BeOS。我喜欢他们这样做的方式,所以我复制了它,尽管与任何事情一样,您也需要查看他们所犯的一些错误,并尽量不要复制它们。 BeOS 也犯过不少错误。

【讨论】:

    【解决方案2】:

    我认为您在这里不需要专门的教程。最基本的 GUI 的核心包括管理代表窗口、按钮、图片、文本框等的矩形对象列表。

    每个像这样的矩形对象都有它的 x 和 y 坐标和尺寸(宽度和高度)。它还有一个 z(深度)坐标,可以告诉它下方的对象(它们的 z 值较小)和上方的对象(它们的 z 值较大)。

    每个矩形对象都有一个指向其父对象和子对象的指针。这使得组合更小和更简单的矩形的任意复杂窗口变得容易。对象。例如,当您抓取一个窗口并移动它时,使用这些父/子指针可以移动所有对象。或者,如果外部对象接收到一个事件,它可以将其转发给其内部子对象进行处理,反之亦然。

    在渲染所有这些矩形对象时,其中一些可能会部分或完全被其他对象遮挡,最重要的是要弄清楚所有对象中哪些是可见的,哪些是不可见的,哪些是部分可见的,因为你不想做很多不必要的工作。为了有效地绘制对象,您希望最多绘制每个像素一次(总是或大部分时间)。除了需要的矩形相交/细分代码之外,这还表明每个对象都知道如何有效地绘制其自身的任意矩形部分。这对于纯色对象来说是最简单的。对于图片,它或多或少是直截了当的(除非您想就地进行图像缩放和颜色减少/转换)。对于文本和矢量对象,这是最难的。

    您甚至可以用小矩形对象组成鼠标指针对象,并使用与所有其他对象相同的代码对其进行绘制和重绘。只需确保指针的 z(深度)坐标使得指针始终位于所有其他对象的顶部。

    这就是一般的想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      相关资源
      最近更新 更多