CWnd
h = GetDlgItem(IDC_PICTURE);
GetDlgItem は窓へのポインタを返すため、格納場所を CWnd* で宣言しておく必要があるわけだ。 ポインタというとわかりにくい気がするが、ピクチャーコントロールはメモリー上のある定められた場所に置かれていて,ポインタは置いてある場所 (アドレス) を値として持っている変数だ。つまり上の命令で、ピクチャコントロールに対応するウィンドウがhに設定できた。
これで窓のオブジェクトが獲得できたが、これが表すデバイス コンテキストを獲得するには CWnd クラスのメンバ関数 GetDC を使用する。
CDC
pDC=h-
GetDC();
h-
GetDC() の表記は慣れていないと理解しづらいが、 「h の GetDC( )」の意味で、1つの関数だ。あるいは h が場所 (ポインタ) だから 「h にある GetDC( )」の意味に捕らえてもかまわない。つまり,pDC=h-
GetDC()は,ピクチャコントロールのデバイスコンテキストのポインタを取得し,それをpDCに格納している。
更に、デバイス コンテキストを自分で獲得した場合には、最後に次のようにしてデバイス コンテキストを解放しないといけない。
h-
ReleaseDC(pDC);
CPen p(PS_SOLID, 2, RGB(0, 255, 0));
次にペンの選択をする。
CPen* oldp=pDC-
SelectObject(&p);
pDC-
MoveTo(10,10);
pDC-
LineTo(200,200);
pDC-
TextOut(100,100,"直線");
使い終わったら、もとのペンに戻す
pDC-
SelectObject(oldp);
Windows のデバイス コンテキストはあまり多く作ることができない。そのため、デバイス コンテキストを解放しないでいると Windows の方で描画が出来なくなってしまう。
pDC-
SelectObject(oldp);
CWnd
h = GetDlgItem(IDC_PICTURE);
h-
Invalidate();
で,ピクチャコントロールに描かれていた図を無効にする。