デバイスコンテキスト

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
abc

デバイスコンテキスト

#1

投稿記事 by abc » 17年前

VC++6.0のMFCです。

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

御津凪

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

#2

投稿記事 by 御津凪 » 17年前

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

バグ

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

#3

投稿記事 by バグ » 17年前

MFCの場合でなおかつダイアログベースアプリならば…


CDC* pDC = GetDC();


↑で取得できます。


ReleaseDC(pDC);


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

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

lbfuvab

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

#4

投稿記事 by lbfuvab » 17年前

メッセージループでWM_PAINTを処理するなら

HDC hdc;
PAINTSTRUCT ps;

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

ですね。

abc

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

#5

投稿記事 by abc » 17年前

引数で渡してやればいいんですねありがとうございます(^^)

閉鎖

“C言語何でも質問掲示板” へ戻る