Drawing Graphic Primitives

Date: 19-Jun-1998
Revised: 31-Mar-1999
(c) Copyright 1997-1999 by H.Fujii

[前へ][次へ]
さて、前回までで、Window を作ってそれを表示すること、また Window が 消されたらプログラムを終了させることができるようになりました。 ここでは、Window の中にテキストや線などの Graphic Primitive を 書くことを行いましょう。

WIN32 Programming では、システムから WM_PAINT メッセージを 受け取った時に、書きたいものを書くというスタイルをとります。 つまり、Window Procedure WndProc の中で WM_PAINT メッセージに対する処理として書くわけです。 ただし、ここで気をつけなければいけないのは、Window に結び付けられ た Graphic Device Context を通じて書くという点です。更に、 Device Context はシステムの共有資源なので、必要な時のみ使って、 不要な時は解放してやる必要があります。

具体的には、WndProcの中で、 次のように書くのが一般的です。
LRESULT CALLBACK WndProc( ... )
{
  HDC hdc;
  PAINTSTRUCT ps;
          :
  case WM_PAINT:
    hdc = BeginPaint( hwnd, &ps );
    OnPaint( hdc );
    EndPaint( hwnd, &ps );
    break;
ここでは、実際に Graphic Primitive を書くのは OnPaint() の中で やるものとしています。
OnPaint() の中では、この program が作る Window の一番左上に "Hello Windows" と書くことにしましょう。問題は Window の座標系 ですが、default では、MM_TEXT と呼ばれているモードになっていて、 その場合は、左上隅を原点とし、水平右方向、鉛直下方向を正とする左手座標系 です。単位は pixel です。また、文字出力の場合は、text alignment が 問題ですが、これも default では (LEFT,TOP) になっています。 従って我々の目的を達成する OnPaint() 関数は、
void OnPaint( HDC hdc )
{
  TextOut( hdc, 0, 0, "Hello Windows", 13 );
}
とすればよいことになります(最後の引数の 13 は文字数)。
[前へ][次へ]