ピクチャコントロールへの描画の基礎知識

  1. DC Visual C++では,描画するには,デバイス コンテキスト オブジェクトを用いる。 デバイス コンテキスト(DC)は、ディスプレイやプリンタなどのデバイスの描画属性に関する情報を収容した Windows のデータ構造である。 言い換えると,DCは絵の具、ペン、ブラシ、文字フォントなどの文房具の箱と考えられる。 そこで、ピクチャー コントロールに描画するためには、ピクチャー コントロールを表すデバイス コンテキストが必要となる。そのためにまずピクチャー コントロール自身(CWnd クラス(窓クラス)のオブジェクト) を次のようにして獲得する。 ただし,ピクチャコントロールのIDをIDC_PICTUREとする。

    CWnd$ \ast$ h = GetDlgItem(IDC_PICTURE);

    GetDlgItem は窓へのポインタを返すため、格納場所を CWnd* で宣言しておく必要があるわけだ。 ポインタというとわかりにくい気がするが、ピクチャーコントロールはメモリー上のある定められた場所に置かれていて,ポインタは置いてある場所 (アドレス) を値として持っている変数だ。つまり上の命令で、ピクチャコントロールに対応するウィンドウがhに設定できた。

    これで窓のオブジェクトが獲得できたが、これが表すデバイス コンテキストを獲得するには CWnd クラスのメンバ関数 GetDC を使用する。

    CDC$ \ast$ pDC=h-$ >$GetDC();

    h-$ >$GetDC() の表記は慣れていないと理解しづらいが、 「h の GetDC( )」の意味で、1つの関数だ。あるいは h が場所 (ポインタ) だから 「h にある GetDC( )」の意味に捕らえてもかまわない。つまり,pDC=h-$ >$GetDC()は,ピクチャコントロールのデバイスコンテキストのポインタを取得し,それをpDCに格納している。

    更に、デバイス コンテキストを自分で獲得した場合には、最後に次のようにしてデバイス コンテキストを解放しないといけない。

    h-$ >$ReleaseDC(pDC);

  2. ペン 青い色で線を引くには,ペン オブジェクトの構築をする。

    CPen p(PS_SOLID, 2, RGB(0, 255, 0));

    次にペンの選択をする。

    CPen* oldp=pDC-$ >$SelectObject(&p);

  3. MoveTo(point) 座標(10,10)に移動

    pDC-$ >$MoveTo(10,10);

  4. LineTo(point) 座標(200,200)まで線を引く

    pDC-$ >$LineTo(200,200);

  5. TextOut(point) 座標(100,100)のところに文字を書く

    pDC-$ >$TextOut(100,100,"直線");

    使い終わったら、もとのペンに戻す

    pDC-$ >$SelectObject(oldp);

    Windows のデバイス コンテキストはあまり多く作ることができない。そのため、デバイス コンテキストを解放しないでいると Windows の方で描画が出来なくなってしまう。

    pDC-$ >$SelectObject(oldp);

  6. 消去ボタン

    CWnd$ \ast$ h = GetDlgItem(IDC_PICTURE);
    h-$ >$Invalidate();

    で,ピクチャコントロールに描かれていた図を無効にする。