AUTHOR: schwarz1009
TITLE: Windowsプログラミングの前提知識
BASENAME: 2020/12/20/152943
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 0
DATE: 12/20/2020 15:29:43
CATEGORY: Windows
CATEGORY: プログラミング
Windowsプログラミングでは、
ハンガリアン記法という統一されたルールで、
変数や構造体メンバの名前を付ける。
たとえば、ポインタには必ずlpが付く。
これが分からないと、構造体メンバの意味が分からない。
(詳しくはやねうらお氏の「Windowsプロフェッショナルゲームプログラミング」が参考になります。)
素のC++では、関数に複数の値を渡すことはできるが、
複数の値を返すことはできない。
しかしながら、複数の値を実行結果として、
呼び出し元に返したい時もある。
このような時、構造体のポインタあるいは参照を渡して、
関数の中から構造体を操作することができる。
返り値はエラーチェックに使う。
Windowsでは、こうしたやり方で関数に変数を与える。
(詳しくはやねうらお氏の「Windowsプロフェッショナルゲームプログラミング」が参考になります。)
Windowsでは、コールバック関数とハンドルを多用し、
メッセージループでイベント駆動をする。
ここで使われるのが、Windowsメッセージ。
WM_という名前で定義されており、
イベントの発生に対してメッセージが送られ、
コールバック関数を実行する。
たとえば、「マウスがクリックされた時」とか、
「画面が再描画された時」などに、
場合や状況に応じてメッセージに応答する。
これを、メッセージループとか、イベントループと呼ぶ。
また、それぞれのウィンドウやアプリケーションインスタンスを識別するため、
ハンドルを使用してOSとやり取りを行う。
MFCでは、メッセージマップによって、
Onから始まるメソッドにメッセージをマップする。
ドキュメントデータを表すドキュメントクラスと、
画面を表すビュークラスを継承する。
特に、データを保存するために、
オブジェクトをファイルに書き出すことのできる、
シリアライズを使用する。
ブラウザなどを作るのであれば、
Visual C++のAppWizardやClassWizardなどを使って、
スケルトンを作成したりメソッドを自動作成して関連づけながら、
ビュークラスを継承していけば、
IEコンポーネントを使った簡単なウェブブラウザを開発できる。
Windowsでは、グラフィック操作などをする際に、
Windowsとデバイスの仲介役として、
デバイスコンテキストを使用する。
たとえばGDIなどの操作で、
ペンやブラシから線や円、四角形などの
グラフィックを描く時などに、
必要となる。
GUIのインターフェイスは、
リソースファイルからデザインしたり、
メソッドからコントロールを作成したり操作したりできる。
メニューはリソースファイルで作るのが一般的だが、
ビュー画面などはさまざまな処理をするために、
動的にコントロールを操作する。
また、VBやC#などでは、
ポトペタ操作でデザインし、
プロパティを操作したり、
イベントハンドラを用いてイベントに応じてメソッドを実行したりして、
イベント駆動で開発ができる。
Windowsは既にこうした.NET言語で開発することが一般的だが、
Javaと同様、仮想マシンである.NET Frameworkが必要であり、
ネイティブなコンパイル言語を使う場合よりも
速度や効率のようなパフォーマンスは劣る。
しかしながら、優れたクラスライブラリを用いて、
とても簡単にアプリケーションが開発できると
エンジニアから評判である。
Windows開発だけでなく、
Unityなどのゲームエンジンにも、
C#が採用されており、
C++と並んでゲーム開発の標準言語になっている。
最近は、サーバーにもWindowsを使う事例が増えた。
これは、NTカーネルが安定して動いていることや、
ActiveXやASP.NETなどのネットワーク技術が成熟し、
UNIXと同等に使えるものになったこと、
それから、契約や取引などの意味で、
マイクロソフトと合意する政治的な判断などが、
理由として挙げられる。
クライアントOSで圧倒的シェアを誇るWindowsだが、
サーバーでも勢力を着実に伸ばしており、
たとえばSQL ServerやWSLなどの努力は
サーバーOSでは選択肢一択のLinuxを
いずれ倒すことになるかもしれない。