タイトル : 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しなおしておく必要があります。 |