2012-01-22 37 views
3

我製作了一個桌面操作系統,內含c打印「hello world」的內核。我正在嘗試爲c中的操作系統創建一個GUI(自定義窗口管理器,按鈕),但我遇到了麻煩。我看着一個教程:在自制操作系統中開發GUI環境

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

是否有任何類型的GUI教程,是一個桌面操作系統Ç的?

p.s.沒有Linux和沒有DOS。只有C標準。

+8

@vines:這是粗魯,業餘開發人員可以使操作系統,每個人都需要資源學習 – CharlesB

+2

@CharlesB:我沒有猶豫,我發現之前:http://stackoverflow.com/questions/8964440/operating-mouse-driver -in-c我也想過從簡單的事情開始,但這聽起來更殘酷,我真的沒有任何冒犯任何人的意圖。 – vines

回答

4

我的建議是看看過去已經存在並存在的GUI系統。看看他們的API,並試圖弄清楚他們在底層如何工作。 Alex's answer給出了一個好的總體起點,但並不是所有的環境都以相同的方式工作。一定要看看他們的架構。他們是客戶端/服務器還是單一的?應用程序如何與他們溝通?一旦你理解了所有這些,你就可以開始設計你的系統。找出您的窗口管理器/應用程序服務器/ x服務器等價物的位置,建立通信渠道並開始編碼。弄清楚所有這些組件如何與您的內核進行交流 - 這非常重要。

與內核開發不同的是,除非你真的很激進,否則你幾乎肯定會構建一些看起來有點像unix或有點像VMS的東西,但爲了方便,將minix和mach的元素混合在一起,構建一個GUI框架是更復雜的是許多不同的變化,這可能是爲什麼沒有這麼多好的教程。

我的個人靈感是BeOS。我喜歡他們這樣做的方式,所以我複製了它,儘管你也需要看看他們犯的一些錯誤,並儘量不要複製它們。 BeOS有其公平的錯誤分享。

5

我不認爲你需要一個特殊的教程在這裏。最基本的GUI的核心包括管理代表窗口,按鈕,圖片,文本框等的矩形對象列表。

每個像這樣的矩形對象都有其x和y座標和尺寸(寬度和高度)。它還有一個z(深度)座標,它告訴它下面有什麼物體(它們的z較小)以及它上面有什麼物體(它們的z較大)。

每個矩形對象還有一個指向它的父對象和它的子對象的指針。這使得編寫更小,更簡單矩形的任意複雜窗口變得容易。對象。例如,當您抓住一個窗口並移動它時,使用這些父/子指針可以移動所有對象。或者,如果外部對象接收到事件,它可以將其轉發給其內部的孩子進行處理,反之亦然。

當涉及渲染所有這些矩形對象時,其中一些可能會被其他對象部分或完全遮擋,最重要的是要弄清楚所有對象中的哪些對象是可見的,不可見的和部分可見的,我想做很多不必要的工作。爲了高效地繪製最多需要畫一個像素的對象(始終或大部分時間)。除了將需要的矩形相交/細分代碼之外,這還表明每個對象都知道如何有效地繪製任意的任意矩形部分。這對於純色對象來說是最微不足道的。對於圖片來說,它或多或少是直截了當的(除非您想要在原地進行圖像縮放和顏色縮減/轉換)。對於文本和矢量對象來說,這是最難的。

您甚至可以將鼠標指針對象排除在小矩形對象之外,並使用與所有其他對象相同的代碼繪製並重繪。只要確保指針的z(深度)座標是指針始終位於所有其他對象之上。

這是一般的想法。