ページ 11

デバイスコンテキスト

Posted: 2008年9月09日(火) 09:43
by abc
VC++6.0のMFCです。

CPaintDC dc(this);でデバイスコンテキストを取得していると思うのですが、
OnPaint()以外の関数でデバイスコンテキストを取得するにはどうすればいいですか?

Re:デバイスコンテキスト

Posted: 2008年9月09日(火) 10:15
by 御津凪
MFC は使ったこと無いので分かりませんが、
Win32APIであれば、GetDC 関数を使えばデバイスコンテキストが取得できます。
HDC dc = GetDC(hWnd); // hWnd はデバイスコンテキストを取得するウインドウハンドル
// ココで dc を使って描画処理
ReleaseDC(hWnd,dc); // 使用したデバイスコンテキストを開放
ちなみに hWnd が NULL なら、画面全体のデバイスコンテキストを取得出来ます。

Re:デバイスコンテキスト

Posted: 2008年9月09日(火) 10:29
by バグ
MFCの場合でなおかつダイアログベースアプリならば…


CDC* pDC = GetDC();


↑で取得できます。


ReleaseDC(pDC);


使い終わったら、上記のようにReleaseDC関数で解放するのを忘れないでください。
メモリリークの原因になります。

解放忘れも防ぎやすくなりますし、描画処理はできるだけOnPaint関数の中に固めておいた方がいいですよ。
OnPaint関数の最初でCDCクラスのポインタを取得して、描画用関数にそのポインタを渡し、描画処理を行ったあとに、OnPaint関数の最後でデバイスコンテキストを解放するような感じでしょうか…

Re:デバイスコンテキスト

Posted: 2008年9月09日(火) 18:40
by lbfuvab
メッセージループでWM_PAINTを処理するなら

HDC hdc;
PAINTSTRUCT ps;

case WM_PAINT:
  hdc=BeginPaint(hWnd,&ps);
  //描画
  EndPaint(hWnd,&ps);
  break;

ですね。

Re:デバイスコンテキスト

Posted: 2008年9月10日(水) 14:43
by abc
引数で渡してやればいいんですねありがとうございます(^^)