わたしの名はフレイ 作家・デザイナー見習い
神々とともに生きる詩人 一等星シリウスの導きを信じて

Windowsプログラミングの前提知識

ハンガリアン記法

Windowsプログラミングでは、
ハンガリアン記法という統一されたルールで、
変数や構造体メンバの名前を付ける。
たとえば、ポインタには必ずlpが付く。
これが分からないと、構造体メンバの意味が分からない。

関数の戻り値

素のC++では、関数に複数の値を渡すことはできるが、
複数の値を返すことはできない。
しかしながら、複数の値を実行結果として、
呼び出し元に返したい時もある。
このような時、構造体のポインタあるいは参照を渡して、
関数の中から構造体を操作することができる。
返り値はエラーチェックに使う。
Windowsでは、こうしたやり方で関数に変数を与える。

メッセージループ

Windowsでは、コールバック関数とハンドルを多用し、
メッセージループでイベント駆動をする。
ここで使われるのが、Windowsメッセージ。
WM_という名前で定義されており、
イベントの発生に対してメッセージが送られ、
コールバック関数を実行する。
たとえば、「マウスがクリックされた時」とか、
「画面が再描画された時」などに、
場合や状況に応じてメッセージに応答する。
これを、メッセージループとか、イベントループと呼ぶ。
また、それぞれのウィンドウやアプリケーションインスタンスを識別するため、
ハンドルを使用してOSとやり取りを行う。

MFC

MFCでは、メッセージマップによって、
Onから始まるメソッドにメッセージをマップする。
ドキュメントデータを表すドキュメントクラスと、
画面を表すビュークラスを継承する。
特に、データを保存するために、
オブジェクトをファイルに書き出すことのできる、
シリアライズを使用する。
ブラウザなどを作るのであれば、
Visual C++のAppWizardやClassWizardなどを使って、
ケルトンを作成したりメソッドを自動作成して関連づけながら、
ビュークラスを継承していけば、
IEコンポーネントを使った簡単なウェブブラウザを開発できる。

バイスコンテキスト

Windowsでは、グラフィック操作などをする際に、
Windowsとデバイスの仲介役として、
バイスコンテキストを使用する。
たとえばGDIなどの操作で、
ペンやブラシから線や円、四角形などの
グラフィックを描く時などに、
必要となる。

リソースファイルとコントロール

GUIインターフェイスは、
リソースファイルからデザインしたり、
メソッドからコントロールを作成したり操作したりできる。
メニューはリソースファイルで作るのが一般的だが、
ビュー画面などはさまざまな処理をするために、
動的にコントロールを操作する。

.NET

また、VBC#などでは、
ポトペタ操作でデザインし、
プロパティを操作したり、
イベントハンドラを用いてイベントに応じてメソッドを実行したりして、
イベント駆動で開発ができる。
Windowsは既にこうした.NET言語で開発することが一般的だが、
Javaと同様、仮想マシンである.NET Frameworkが必要であり、
ネイティブなコンパイル言語を使う場合よりも
速度や効率のようなパフォーマンスは劣る。
しかしながら、優れたクラスライブラリを用いて、
とても簡単にアプリケーションが開発できると
エンジニアから評判である。
Windows開発だけでなく、
Unityなどのゲームエンジンにも、
C#が採用されており、
C++と並んでゲーム開発の標準言語になっている。

サーバーにもWindowsを使う

最近は、サーバーにもWindowsを使う事例が増えた。
これは、NTカーネルが安定して動いていることや、
ActiveXASP.NETなどのネットワーク技術が成熟し、
UNIXと同等に使えるものになったこと、
それから、契約や取引などの意味で、
マイクロソフトと合意する政治的な判断などが、
理由として挙げられる。
クライアントOSで圧倒的シェアを誇るWindowsだが、
サーバーでも勢力を着実に伸ばしており、
たとえばSQL ServerやWSLなどの努力は
サーバーOSでは選択肢一択のLinux
いずれ倒すことになるかもしれない。