[HMC]年間5250円で独自ドメイン付属、ウィルスチェックありのレンタルサーバ!
Last update : 1999/08/08
DirectDraw基礎 第4回
サーフェイスにGDI関数を使用して描画
サンプルコードのダウンロード
  では、まずサンプルコードをダウンロードし、解凍して下さい。 私はVisual C++6.0でコンパイルしているので、をお持ちの方は Visual C++でプロジェクトファイルを開いて下さい(「ddraw_04.dsw」をダブルクリックすれば開けます)。 圧縮ファイルに含まれる「ddraw_04.exe」をダブルクリックし、実行してみて下さい。どうでしょう?画面が切り替わり、フルスクリーン化し、『GDIによるテキストの表示』という文字列が表示されると思います。 今回は、サーフェイスにGDI関数を使用して描画をします。
GDI概要
  GDIとはGraphic Device Interfaceの略であり、ウィンドウプログラミングには欠かせないグラフィックライブラリです。 第1回でも記述しましたが、DirectDrawの関数には文字や線、円などの描画関数が用意されていません。その場合、GDIを使用してサーフェイスに描画する事になります。 ただ、GDIの描画速度はあまり速くないので、速度重視ゲームの場合、多用は控えた方が良いでしょう。
デバイスコンテキストハンドルの作成、解放
  今回は、テキストを出力する部分を『DdTextOut』関数にまとめました。さぁコードを見てみましょう。
  GDIで描画するためには、デバイスコンテキストを認識するハンドルというものを取得しなければなりません。 デバイスコンテキストを認識するハンドルとは、描画可能なメモリのパスを収納しておくような感じのもので、GDI関数呼び出し時によく引数として使用します。 では、ハンドルの取得方法を説明します。

書式HRESULT GetDC( HDC FAR *lphDC );
lphDC デバイス コンテキストが返されるハンドルへのポインタ。
戻り値 DirectDrawオブジェクトの作成に成功するとDD_OKが返ってくるらしい。

「lpFront->GetDC(&hdc);」のように、途中「->」を記述しています。これらはC++で使われるクラスというものですが、ここでは解説省略。クラスについては他のHPを参照して下さい。
こうして、GetDCを実行すると、そのサーフェイス(今回はプライマリサーフェイス)のデバイスコンテキストを認識するハンドルを取得出来ます。
では、次にGDI関数の『TextOut』について説明します。

書式BOOL TextOut( HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cbString );
hdcデバイスコンテキストを認識するハンドル
今回は「hdc」を引き渡す。
nXStart描画先のX座標
nYStart描画先のY座標
lpString描画したい文字列
hdc文字列のバイト数(文字数とも言うかも)
戻り値 成功した場合はTRUEが返ってくるらしい。

こうして、一通りGDI関数を使用したら、今度はハンドルを解放しなければなりません。 解放には、次の関数(サーフェイスのメンバ関数)を呼び出します。

書式HRESULT ReleaseDC( HDC hDC );
hDC GetDCを使用して取得したデバイスコンテキストのハンドル。
今回はhdcを引き渡す。GetDCとは違い、ポインタでは無いことに注意しましょう。
戻り値 DirectDrawオブジェクトの作成に成功するとDD_OKが返ってくるらしい。