2012-01-22 20 views
3

私は、「hello world」を印刷するcでカーネルを使ってデスクトップOSを作っています。私はCで自分のOS用のGUI(カスタムウィンドウマネージャ、ボタン)を作ろうとしていますが、問題があります。私は1つのチュートリアルを見て:家庭OSでのGUI環境の開発

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

CにデスクトップオペレーティングシステムのためのものであるGUIのチュートリアルのいずれかの種類がありますか?

p.s. LinuxもDOSもありません。のみC標準。

+8

@vines:それは無礼です、アマチュアの開発者はOSを作ることができます、誰もが学ぶためにリソースが必要です – CharlesB

+2

@CharlesB:私はこれを見つける前に躊躇しました:http://stackoverflow.com/questions/8964440/operating-mouse-driver私はまた、より単純なものから始めるアドバイスを考えましたが、それはさらに残酷に聞こえ、誰にも怒らせるつもりはありません。 – vines

答えて

4

私のお勧めは、すでに存在していて過去に存在していたGUIシステムを見てみることです。彼らのAPIを見て、彼らがどのように下に働くかを考えてみてください。 Alex's answerは良い出発点ですが、すべての環境がまったく同じように動作するわけではありません。彼らのアーキテクチャも見てください。それらはクライアント/サーバーかモノリシックですか?アプリはそれらとどのように通信しますか?すべてのことを理解したら、システムの設計を始めることができます。あなたのウィンドウマネージャ/アプリケーションサーバ/ xサーバ相当のものがどこにあるのかを理解し、通信チャネルを構築し、コーディングを開始してください。これらのコンポーネントのすべてがカーネルにどのように話す必要があるかを理解する - 本当に重要なことです。

あなたが本当に過激でない限り、VMSのようなUNIXやビットのように見えるものの、MinixとMachの要素を混在させてGUIフレームワークを構築するのはほぼ確実ですおそらく多くの良いチュートリアルがない理由が多種多様で複雑になります。

私の個人的なインスピレーションはBeOSです。私は彼らがやったやり方が好きだったので、コピーしましたが、何かと同じように、間違いのいくつかを見て、それらをコピーしないようにする必要があります。 BeOSは、間違いの正当な割合を持っていました。

5

ここで特別なチュートリアルは必要ありません。最も基本的なGUIのコアは、ウィンドウ、ボタン、画像、テキストボックスなどを表す長方形のオブジェクトのリストを管理することから成っています。

そのようなすべての長方形のオブジェクトは、x座標とy座標と幅)。また、その下にあるオブジェクト(zが小さい)とその上にあるオブジェクト(zが大きい)を示すz(深度)座標もあります。

すべての長方形オブジェクトには、その親とその子へのポインタもあります。これにより、より小さく簡単な矩形の任意の複雑なウィンドウを簡単に作成することができます。オブジェクト。たとえば、ウィンドウをつかんで移動するときに、これらの親/子ポインタを使用すると、すべてのオブジェクトを移動できます。また、外側のオブジェクトがイベントを受け取った場合は、それを内側の子に転送して処理することができます。

一部のオブジェクトが部分的または完全に他のオブジェクトによって隠されている場合、最も重要なことは、すべてのオブジェクトが表示されているかどうかを調べ、多くの不必要な作業をしたい。オブジェクトを効率的に描画するには、すべてのピクセルを最大で1回(常にまたはほとんどの時間)描画します。必要な四角形の交差/細分化コードに加えて、これはすべてのオブジェクトがそれ自身の任意の長方形部分を効率的に描画する方法を知っていることを示唆しています。これは、単色オブジェクトでは最も簡単です。画像の場合は、多少なりとも単純です(画像の拡大縮小と色の縮小/変換をしたい場合を除いて)。テキストやベクトルオブジェクトの場合、最も難しいです。

小さな四角いオブジェクトからマウスポインタオブジェクトを構成し、他のすべてのオブジェクトと同じコードで描画して再描画することもできます。ポインタのz(深度)座標が、ポインタが常に他のすべてのオブジェクトの上にくるようにしてください。

これは一般的な考えです。