VC++6.0のMFCです。
CPaintDC dc(this);でデバイスコンテキストを取得していると思うのですが、
OnPaint()以外の関数でデバイスコンテキストを取得するにはどうすればいいですか?
デバイスコンテキスト
Re:デバイスコンテキスト
MFC は使ったこと無いので分かりませんが、
Win32APIであれば、GetDC 関数を使えばデバイスコンテキストが取得できます。
Win32APIであれば、GetDC 関数を使えばデバイスコンテキストが取得できます。
HDC dc = GetDC(hWnd); // hWnd はデバイスコンテキストを取得するウインドウハンドル // ココで dc を使って描画処理 ReleaseDC(hWnd,dc); // 使用したデバイスコンテキストを開放ちなみに hWnd が NULL なら、画面全体のデバイスコンテキストを取得出来ます。
Re:デバイスコンテキスト
MFCの場合でなおかつダイアログベースアプリならば…
CDC* pDC = GetDC();
↑で取得できます。
ReleaseDC(pDC);
使い終わったら、上記のようにReleaseDC関数で解放するのを忘れないでください。
メモリリークの原因になります。
解放忘れも防ぎやすくなりますし、描画処理はできるだけOnPaint関数の中に固めておいた方がいいですよ。
OnPaint関数の最初でCDCクラスのポインタを取得して、描画用関数にそのポインタを渡し、描画処理を行ったあとに、OnPaint関数の最後でデバイスコンテキストを解放するような感じでしょうか…
CDC* pDC = GetDC();
↑で取得できます。
ReleaseDC(pDC);
使い終わったら、上記のようにReleaseDC関数で解放するのを忘れないでください。
メモリリークの原因になります。
解放忘れも防ぎやすくなりますし、描画処理はできるだけOnPaint関数の中に固めておいた方がいいですよ。
OnPaint関数の最初でCDCクラスのポインタを取得して、描画用関数にそのポインタを渡し、描画処理を行ったあとに、OnPaint関数の最後でデバイスコンテキストを解放するような感じでしょうか…
Re:デバイスコンテキスト
メッセージループでWM_PAINTを処理するなら
HDC hdc;
PAINTSTRUCT ps;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
//描画
EndPaint(hWnd,&ps);
break;
ですね。
HDC hdc;
PAINTSTRUCT ps;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
//描画
EndPaint(hWnd,&ps);
break;
ですね。