tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^7: GetDIbitsの使用方法について
投稿日: 2014/03/15(Sat) 14:25
投稿者魔界の仮面弁士
> ディスクトップ
ディスクトップ(disctop:盤上)ではなく
デスクトップ(desktop:卓上)です。

> ウインドハンドル
ウィンドハンドル(wind-handle:風のハンドル)ではなく、
ウィンドウハンドル(window-handle:窓のハンドル)です。


> > > > ウィンドウ(hWnd)のハンドルとデバイスコンテキスト(hDC)は別物ですよ。
その説明も微妙に違っていそう。

ウィンドウのハンドルが hWnd、
デバイスコンテキスト(DC)のハンドルが hDC なので。


> MSDNで調べました。
ところで、取得したリソースは使用後に解放していますよね?


> 結果はチンプンカンプンでした。
どこまで分かっていて、どこからチンプンカンプンなのか分からないので、ざっくり書くと:


デバイスコンテキストというのは、いわば描画ツールの総称です。
フォント、ペン、色、ブラシ、リージョンなど。

その描画ツールセット一式ごとに与えられた識別番号が、hDC と呼ばれるハンドルです。


DC での描画先となる「キャンバス」としては、ウィンドウのほか、プリンター出力にも使われます。
オンメモリでビットマップを生成する際にも使われますね。いわゆるメモリ DC というヤツです。


DC の取得方法/生成方法はいろいろとあります。

通常の描画処理(WM_PAINT)で使われるのは、BeginPaint/EndPaint による DC。
(WM_PAINT メッセージというのは、VB でいうとことの Paint イベントのことです)

GetDC/ReleseDC  は、WM_PAINT 以外によるウィンドウ描画に用いられるもの。
(今回利用しようとしているのはこれですね)

このほか、CreateDC/DeleteDC とか CreateCompatibleDC/DeleteDC などもあります。


注意する必要があるのは、PictureBox や Form の AutoRedraw プロパティですね。
これについては、下記で説明されています。(今回は VBA なので関係無いですが)
http://www016.upp.so-net.ne.jp/garger-studio/gameprog/vb0152.html



> ohbm = SelectObject(Frame1DC, hbm)
> Debug.Print ohbm  '← 0 がPrintされる = Error?
SelectObjct は、直前に設定されていたオブジェクトを返します。
非互換のオブジェクトを渡した場合は、失敗を表すゼロが返されます。

なお、新しいオブジェクトでの描画処理が終わったら、その戻り値を渡して
元のオブジェクトをSelectObjectしなおしておく必要があります。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。