« 最近暑い。 | トップページ | リファクタリング中 »

2007年6月26日 (火)

デフォルトオブジェクト

今回はデバイスコンテキストのデフォルトオブジェクトについて。

昔、MSDNのどこかのページでこのデフォルトオブジェクトについての記述を見たような記憶があるのだが、あらためて捜してみると見つからない(見つかったらリンクを貼ろうと思っているが)。仕方がないので、他のサイトを参考にすると、デバイスコンテキストには、デフォルトオブジェクトとしてストックオブジェクトの黒のペンと白のブラシが選択されているそうなのでこれを確認してみる。デバイスコンテキストに現在選択されているオブジェクトのハンドルはWin32APIのGetCurrentObjectで取得できる。また、ストックオブジェクトのハンドルは同じくGetStockObjectで取得できるので、これらのAPIによって返されるハンドルをWM_PAINTメッセージの処理内で表示してみた。

Defobjects1

上段がペンについて。引数にOBJ_PENを指定してGetCurrentObjectで現在選択されているペンオブジェクトのハンドルと引数にBLACK_PENを指定してGetStockObjectでストックオブジェクトの黒のペンのハンドルを表示した。確かにハンドルが一致する。

下段がブラシについて。ペンと同様に引数にOBJ_BRUSHを指定してGetCurrentObjectで現在選択されているブラシオブジェクトのハンドルと引数にWHITE_BRUSHを指定してGetStockObjectでストックオブジェクトの白のブラシのハンドルを表示した。こちらもハンドルが一致する。

一番下の図形はデフォルトのペンとブラシを使ってWin32APIのRectangleを使って描画した矩形である。確かに輪郭が黒で内部が白で塗りつぶされている。

最後にフォントについて。フォントはストックオブジェクトのSYSTEM_FONTフォントが選択されるそうなので、同様に試してみた。結果は下の通り。

Defobjects2_1

現在選択されているフォントオブジェクトのハンドルは引数にOBJ_FONTを指定してGetCurrentObjectを呼び出せば取得できる。

ちなみに、デバイスコンテキストには厳密にはクラスデバイスコンテキスト、コモンデバイスコンテキスト、プライベートデバイスコンテキストの3種類があるが、ここでは、コモンデバイスコンテキストを扱った。

« 最近暑い。 | トップページ | リファクタリング中 »

Windows」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1497665/39651863

この記事へのトラックバック一覧です: デフォルトオブジェクト:

« 最近暑い。 | トップページ | リファクタリング中 »

自作ソフトウェア

無料ブログはココログ

メモ