<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>いちばんやさしいゲームの作り方 &#187; GDI</title>
	<atom:link href="http://www.game-create.com/archives/tag/gdi/feed" rel="self" type="application/rss+xml" />
	<link>http://www.game-create.com</link>
	<description>文系の人でも、数理学がわからない人でもゲームプログラミングをマスターできるブログ</description>
	<lastBuildDate>Tue, 08 Jun 2010 01:28:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Study::Bitmap で透過色を指定する</title>
		<link>http://www.game-create.com/archives/886</link>
		<comments>http://www.game-create.com/archives/886#comments</comments>
		<pubDate>Fri, 24 Oct 2008 05:34:12 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[Study::Bitmap]]></category>
		<category><![CDATA[デバイスコンテキスト]]></category>
		<category><![CDATA[ラスターイメージ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=886</guid>
		<description><![CDATA[Study::Bitmap で透過色を指定するためには Study::Bitmap::load() メソッドの第３引数に色情報を渡します。

たとえば赤を透過色にしたい場合は次のように書きます。
Study::Bitma [...]]]></description>
			<content:encoded><![CDATA[<p>Study::Bitmap で透過色を指定するためには Study::Bitmap::load() メソッドの第３引数に色情報を渡します。</p>
<p><span id="more-886"></span></p>
<p>たとえば赤を透過色にしたい場合は次のように書きます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">Study</span><span class="hl-default">::</span><span class="hl-identifier">Bitmap graphics</span><span class="hl-default">;
</span><span class="hl-identifier">graphics</span><span class="hl-default">.</span><span class="hl-identifier">load</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">, </span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">graphics.bmp</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-identifier">RGB</span><span class="hl-brackets">(</span><span class="hl-number">255</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-brackets">))</span><span class="hl-default">; </span><span class="hl-comment">// RGB の順で輝度を指定する</span></pre></div></div>
<p>この指定によって自動的にマスク画像が作られるようになります。マスク画像のデバイスコンテキストハンドルは Study::Bitmap::getMask() メソッドによって取得できます。</p>
<p>これで Study::Bitmap::load() 時にデバイスコンテキストハンドルを渡さなくても済むようになればいいのですが、今のところ良い方法が思いつきません。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/886/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>背景色を透過して画像をブロック転送する</title>
		<link>http://www.game-create.com/archives/735</link>
		<comments>http://www.game-create.com/archives/735#comments</comments>
		<pubDate>Sat, 20 Sep 2008 09:40:47 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[Study::Bitmap]]></category>
		<category><![CDATA[ラスターイメージ]]></category>
		<category><![CDATA[ラスターオペレーション]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=735</guid>
		<description><![CDATA[背景色を透過して画像をブロック転送するためには、ラスターオペレーションを使います。

まず、普通に画像をブロック転送すると次のようになります。

背景色であるピンク色までもがコピーされているのがわかります。これは多くの場 [...]]]></description>
			<content:encoded><![CDATA[<p>背景色を透過して画像をブロック転送するためには、ラスターオペレーションを使います。</p>
<p><span id="more-735"></span></p>
<p>まず、普通に画像をブロック転送すると次のようになります。</p>
<p><img src="http://www.game-create.com/wp-content/uploads/2008/09/normal_blt.gif" alt="" title="通常のブロック転送" width="192" height="64" class="alignnone size-full wp-image-736" /></p>
<p>背景色であるピンク色までもがコピーされているのがわかります。これは多くの場合、意図した結果ではないはずです。背景色のピンクを除外してコピーするためには次の手順を踏みます。</p>
<p>まず、背景を白、本体を黒とする画像を作ります。これをマスク画像と呼びます。マスク画像が用意できたらラスターオペレーションを使って背景へ AND 転送し、本体の形に背景をくりぬきます。 AND 転送すると黒に近い色が採用されます。この特性を利用して本体の形に穴を開けるというわけです。</p>
<p><img src="http://www.game-create.com/wp-content/uploads/2008/09/trans_blt_1.gif" alt="" title="背景色を透過するための手順１" width="192" height="64" class="alignnone size-full wp-image-737" /></p>
<p>背景がくりぬけたら、今度は、そのくりぬいた穴に本体を流し込みます。くりぬいた穴に本体を流し込むためには、背景を黒とする画像と背景とを OR 転送します。 OR 転送すると双方の黒ではない色が採用されます。</p>
<p><img src="http://www.game-create.com/wp-content/uploads/2008/09/trans_blt_2.gif" alt="" title="背景色を透過するための手順２" width="192" height="64" class="alignnone size-full wp-image-738" /></p>
<p>見事、目的を達成することができました。</p>
<p>なお、 Study::Bitmap ではこのマスク画像を自動的に生成する機能があります。便利ですね。今後も使っていきましょう。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/735/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>図形を描画する際に背景を透過する</title>
		<link>http://www.game-create.com/archives/504</link>
		<comments>http://www.game-create.com/archives/504#comments</comments>
		<pubDate>Fri, 25 Jul 2008 13:09:03 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[Win32API]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=504</guid>
		<description><![CDATA[図形を描画する際に背景を透過するためには SetBkMode() 関数を使います。

通常、 GDI 関数を使って図形を描画する際には、描画に先だって描画範囲が背景色で塗りつぶされます。一番わかりやすいのはテキストを描画 [...]]]></description>
			<content:encoded><![CDATA[<p>図形を描画する際に背景を透過するためには SetBkMode() 関数を使います。</p>
<p><span id="more-504"></span></p>
<p>通常、 GDI 関数を使って図形を描画する際には、描画に先だって描画範囲が背景色で塗りつぶされます。一番わかりやすいのはテキストを描画する TextOut() 関数だと思います。しかしながら、時として、特にゲームの場合は背景を透過して欲しい場合があります。これを実現するためには SetBkMode() 関数に TRANSPARENT と設定します。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// デバイスコンテキストを取得
</span><span class="hl-identifier">HDC hdc</span><span class="hl-default"> = </span><span class="hl-identifier">GetDC</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">// デバイスコンテキストの背景描画モードを TRANSPARENT に変更
</span><span class="hl-identifier">SetBkMode</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">, </span><span class="hl-identifier">TRANSPARENT</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">// 描画（背景が透過されている）
</span><span class="hl-identifier">TextOut</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">, </span><span class="hl-number">10</span><span class="hl-code">, </span><span class="hl-number">10</span><span class="hl-code">, </span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">てすてぃー</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-identifier">lstrlen</span><span class="hl-brackets">(</span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">てすてぃー</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)))</span><span class="hl-default">;

</span><span class="hl-comment">// 後始末
</span><span class="hl-identifier">ReleaseDC</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">, </span><span class="hl-identifier">hdc</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<p>なお、背景色が欲しい場合は SetBkMode() 関数に OPAQUE を指定するのですが、このとき背景色を指定するための関数は SetBkColor() になります。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">SetBkMode</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">, </span><span class="hl-identifier">OPAQUE</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-identifier">SetBkColor</span><span class="hl-brackets">(</span><span class="hl-identifier">hdc</span><span class="hl-code">, </span><span class="hl-identifier">RGB</span><span class="hl-brackets">(</span><span class="hl-number">255</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-brackets">))</span><span class="hl-default">;</span></pre></div></div>
<p>この関数は意外なところに応用が利くのですが、それはまた後ほど。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/504/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GDI 関数に NULL を渡してもプログラムが続行する</title>
		<link>http://www.game-create.com/archives/353</link>
		<comments>http://www.game-create.com/archives/353#comments</comments>
		<pubDate>Sat, 10 May 2008 07:47:19 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[null]]></category>
		<category><![CDATA[Study::Bitmap]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=353</guid>
		<description><![CDATA[そんな馬鹿な…

Study::Bitmap が引数なしコンストラクタを持っていないので使い勝手が悪いなぁと思い、未初期化の状態というの許そうと思っているのですが、受け側の GDI 関数が NULL 許容だと絵が表示され [...]]]></description>
			<content:encoded><![CDATA[<p>そんな馬鹿な…</p>
<p><span id="more-353"></span></p>
<p>Study::Bitmap が引数なしコンストラクタを持っていないので使い勝手が悪いなぁと思い、未初期化の状態というの許そうと思っているのですが、受け側の GDI 関数が NULL 許容だと絵が表示されない原因がわかりませんよね。</p>
<p>まだメルマガで例外は扱いたくないです。デザインパターンもポインタもまだ先に延ばしてます。うむむ…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/353/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TextOut() 関数が出力する文字列の背景色を透過する</title>
		<link>http://www.game-create.com/archives/349</link>
		<comments>http://www.game-create.com/archives/349#comments</comments>
		<pubDate>Wed, 07 May 2008 14:07:37 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[Win32API]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=349</guid>
		<description><![CDATA[TextOut() 関数が出力する文字列の背景色を透過するためには SetBkMode() 関数を使います。

SetBkMode() 関数に描画対象のデバイスコンテキストハンドルと TRANSPARENT という定数を [...]]]></description>
			<content:encoded><![CDATA[<p>TextOut() 関数が出力する文字列の背景色を透過するためには SetBkMode() 関数を使います。</p>
<p><span id="more-349"></span></p>
<p>SetBkMode() 関数に描画対象のデバイスコンテキストハンドルと TRANSPARENT という定数を指定すると、そのデバイスコンテキストに対する描画処理の背景色が透過されます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">SetBkMode</span><span class="hl-brackets">(</span><span class="hl-identifier">hBackBuffer</span><span class="hl-code">, </span><span class="hl-identifier">TRANSPARENT</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-identifier">TextOut</span><span class="hl-brackets">(</span><span class="hl-identifier">hBackBuffer</span><span class="hl-code">, </span><span class="hl-number">100</span><span class="hl-code">, </span><span class="hl-number">100</span><span class="hl-code">, </span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">ほげら</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-identifier">lstrlen</span><span class="hl-brackets">(</span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">ほげら</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)))</span><span class="hl-default">;</span></pre></div></div>
<p>TextOut() 関数は最後の引数に文字数を指定する必要があって面倒だったのですが、このサンプルコードにあるように lstrlen() 関数の採用によって解決できました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/349/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Study::Bitmap の使い方</title>
		<link>http://www.game-create.com/archives/344</link>
		<comments>http://www.game-create.com/archives/344#comments</comments>
		<pubDate>Fri, 02 May 2008 06:03:46 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[BMP]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[Study::Bitmap]]></category>
		<category><![CDATA[Win32API]]></category>
		<category><![CDATA[デバイスコンテキスト]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=344</guid>
		<description><![CDATA[ビットマップを扱うためにメルマガで配布いたしました Study::Bitmap の使い方を説明します。

Study::Bitmap は BMP 形式のファイルをメモリ内に読み込んで、そのビットマップのデバイスコンテキス [...]]]></description>
			<content:encoded><![CDATA[<p>ビットマップを扱うためにメルマガで配布いたしました Study::Bitmap の使い方を説明します。</p>
<p><span id="more-344"></span></p>
<p>Study::Bitmap は BMP 形式のファイルをメモリ内に読み込んで、そのビットマップのデバイスコンテキストへアクセスする手段を提供してくれます。</p>
<p>Study::Bitmap を使うためには次の情報が必要になります。</p>
<ol>
<li>読み込んだビットマップの表示先となるデバイスコンテキストのハンドル</li>
<li>読み込みたいビットマップファイルの名前</li>
</ol>
<p>たとえば hWindow というハンドルが指すデバイスコンテキストに対して player.bmp という画像ファイルを表示させたい場合の Study::Bitmap 変数を作るためには次のように書きます。</p>
<div class="hl-surround" style="height:16.8px;"><div class="hl-main"><pre><span class="hl-identifier">Study</span><span class="hl-default">::</span><span class="hl-identifier">Bitmap player</span><span class="hl-brackets">(</span><span class="hl-identifier">hWindow</span><span class="hl-code">, </span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">player.bmp</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">))</span><span class="hl-default">;</span></pre></div></div>
<p>ここで生成した player という変数は BitBlt() 等の GDI 関数のデバイスコンテキストハンドルとして渡すことが可能になります。先の例では hWindows というハンドルが指すデバイスコンテキストへ player.bmp という画像ファイルを表示させることが目的でしたが、これを実現するためには次のように書きます。</p>
<div class="hl-surround" style="height:16.8px;"><div class="hl-main"><pre><span class="hl-identifier">BitBlt</span><span class="hl-brackets">(</span><span class="hl-identifier">hWindow</span><span class="hl-code">, </span><span class="hl-identifier">posX</span><span class="hl-code">, </span><span class="hl-identifier">posY</span><span class="hl-code">, </span><span class="hl-identifier">width</span><span class="hl-code">, </span><span class="hl-identifier">height</span><span class="hl-code">, </span><span class="hl-identifier">player</span><span class="hl-code">, </span><span class="hl-identifier">srcX</span><span class="hl-code">, </span><span class="hl-identifier">srcY</span><span class="hl-code">, </span><span class="hl-identifier">SRCCOPY</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<p>ちなみに Study::Bitmap は、その名が示すとおり、ビットマップを扱うための手順を学ぶための型であり、実用性は全く考慮されておりません。もし、ビットマップファイルを扱う手順を忘れてしまった場合は Study::Bitmap のソースコードを開いて確認することができます。</p>
<p>一番の理想は、この型から脱却して別のライブラリを使えるだけの実力を身につけることなのですが、まぁ、まずは一緒にこれを使っていきましょう。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/344/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>画像ファイルの内容をウィンドウに描画する</title>
		<link>http://www.game-create.com/archives/323</link>
		<comments>http://www.game-create.com/archives/323#comments</comments>
		<pubDate>Fri, 11 Apr 2008 07:15:18 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[BMP]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[Win32API]]></category>
		<category><![CDATA[デバイスコンテキスト]]></category>
		<category><![CDATA[画像]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=323</guid>
		<description><![CDATA[画像ファイルの内容をウィンドウに描画するためには、次のステップを踏みます。


描画先のデバイスコンテキストハンドルを取得する
描画先と互換性のあるデバイスコンテキストを作成する
画像ファイルを読み込む
画像ファイルから [...]]]></description>
			<content:encoded><![CDATA[<p>画像ファイルの内容をウィンドウに描画するためには、次のステップを踏みます。</p>
<p><span id="more-323"></span></p>
<ul>
<li>描画先のデバイスコンテキストハンドルを取得する</li>
<li>描画先と互換性のあるデバイスコンテキストを作成する</li>
<li>画像ファイルを読み込む</li>
<li>画像ファイルから読み込んだ内容を作成したデバイスコンテキストに適用する</li>
<li>BitBlt() 関数を使う</li>
</ul>
<p>まずは<a href="http://www.game-create.com/wp-content/uploads/manuals/articles/instructions/DrawImageFromFileByDeviceContext/DrawImageFromFileByDeviceContext.html">図解</a>をご覧ください。</p>
<p>以下、ソースコードとともにひとつずつ詳細を解説します。</p>
<h4>描画先のデバイスコンテキストハンドルを取得する</h4>
<p>まず、描画先のデバイスコンテキストハンドルを用意します。 WM_PAINT 内であれば BeginPaint() 関数の戻り値として取得できます。 WM_PAINT 以外の場所の場合は GetDC() 関数を使います。詳しくは「<a href="http://www.game-create.com/archives/316">ゲーム画面の描画に必要なデバイスコンテキストハンドルを取得する</a>」を参照ください。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// WM_PAINT 内
</span><span class="hl-identifier">HDC destHDC</span><span class="hl-default"> = </span><span class="hl-identifier">BeginPaint</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-code">, &amp;</span><span class="hl-identifier">ps</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-comment">// WM_PAINT 外
</span><span class="hl-identifier">HDC destHDC</span><span class="hl-default"> = </span><span class="hl-identifier">GetDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<h4>描画先と互換性のあるデバイスコンテキストを作成する</h4>
<p>描画先のデバイスコンテキストハンドルを取得することができたら、そのハンドルが示すデバイスコンテキストと互換性のあるデバイスコンテキストを作成します。このデバイスコンテキストは画像ファイルの読み込み先になります。あるデバイスコンテキストと互換性のあるデバイスコンテキストを作成するためには CreateCompatibleDC() 関数を使います。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// destHDC と互換性のあるデバイスコンテキストを作成し、ハンドルを返す
</span><span class="hl-identifier">HDC srcHDC</span><span class="hl-default"> = </span><span class="hl-identifier">CreateCompatibleDC</span><span class="hl-brackets">(</span><span class="hl-identifier">destHDC</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<h4>画像ファイルを読み込む</h4>
<p>描画先と、画像ファイルの読み込み先のデバイスコンテキストができたら、画像ファイルを読み込みます。画像ファイルを読み込むためには LoadImage() 関数を使います。画像ファイルの置き場所については「<a href="http://www.game-create.com/archives/308">画像ファイルを LoadImage() 関数で読み込めるようにする</a>」を参照してください。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// 画像ファイルを読み込む
</span><span class="hl-identifier">HBITMAP bitmap</span><span class="hl-default"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">HBITMAP</span><span class="hl-brackets">)</span><span class="hl-identifier">LoadImage</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">,
                                    </span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">madoka.bmp</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-comment">// 読み込むファイル名
                                    </span><span class="hl-identifier">IMAGE_BITMAP</span><span class="hl-code">,
                                    </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">,
                                    </span><span class="hl-identifier">LR_LOADFROMFILE</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<h4>画像ファイルから読み込んだ内容を作成したデバイスコンテキストに適用する</h4>
<p>画像が読み込めたら、先ほど CreateCompatibleDC() 関数で作ったデバイスコンテキストへ、画像ファイルの内容を適用します。画像ファイルの内容をデバイスコンテキストへ適用するためには SelectObject() 関数を使います。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// srcHDC に bitmap を適用する
</span><span class="hl-identifier">SelectObject</span><span class="hl-brackets">(</span><span class="hl-identifier">srcHDC</span><span class="hl-code">, </span><span class="hl-identifier">bitmap</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<h4>BitBlt() 関数を使う</h4>
<p>デバイスコンテキストに画像ファイルの内容が適用できたら完了です。あとは、画像の読み込み先（ srcHDC ）から描画先（ destHDC ）へデータを転送することにより、自分の好きなようにグラフィックを表示することができるようになります。グラフィックデータを転送するためには BitBlt() 関数を使います。詳しくは「<a href="http://www.game-create.com/archives/122">ビットマップをブロック転送する</a>」を参照してください。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// 画像を転送する
</span><span class="hl-identifier">BitBlt</span><span class="hl-brackets">(</span><span class="hl-identifier">destHDC</span><span class="hl-code">,  </span><span class="hl-comment">// 描画先（ HDC ）
       </span><span class="hl-number">320</span><span class="hl-code">, </span><span class="hl-number">240</span><span class="hl-code">, </span><span class="hl-comment">// 描画先の左上座標
       </span><span class="hl-number">32</span><span class="hl-code">, </span><span class="hl-number">32</span><span class="hl-code">,   </span><span class="hl-comment">// 転送する幅
       </span><span class="hl-identifier">srcHDC</span><span class="hl-code">,   </span><span class="hl-comment">// 転送元（ HDC ）
       </span><span class="hl-number">120</span><span class="hl-code">, </span><span class="hl-number">100</span><span class="hl-code">, </span><span class="hl-comment">// 転送元の左上座標
       </span><span class="hl-identifier">SRCCOPY</span><span class="hl-brackets">)</span><span class="hl-default">; </span><span class="hl-comment">// 転送方式</span></pre></div></div>
<h4>使ったリソースを解放する</h4>
<p>最後に、使ったリソースを解放してシステムへ返します。 GetDC() 関数で取得したデバイスコンテキストハンドルは ReleaseDC() 関数で解放し、 CreateCompatibleDC() 関数で作成したデバイスコンテキストハンドルは DeleteDC() 関数で解放します。詳しくは「 <a href="http://www.game-create.com/archives/101">ReleaseDC() と DeleteDC() の違い</a>」を参照ください。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// 使い終わったリソースを解放する
</span><span class="hl-identifier">DeleteObject</span><span class="hl-brackets">(</span><span class="hl-identifier">bitmap</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-identifier">DeleteDC</span><span class="hl-brackets">(</span><span class="hl-identifier">srcHDC</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-identifier">ReleaseDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-code">, </span><span class="hl-identifier">destHDC</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<h4>一連のソース</h4>
<div class="hl-surround" style="height:280px;"><div class="hl-main"><pre><span class="hl-comment">// WM_PAINT 内
</span><span class="hl-identifier">HDC destHDC</span><span class="hl-default"> = </span><span class="hl-identifier">BeginPaint</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-code">, &amp;</span><span class="hl-identifier">ps</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-comment">// WM_PAINT 外
</span><span class="hl-identifier">HDC destHDC</span><span class="hl-default"> = </span><span class="hl-identifier">GetDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">// destHDC と互換性のあるデバイスコンテキストを作成し、ハンドルを返す
</span><span class="hl-identifier">HDC srcHDC</span><span class="hl-default"> = </span><span class="hl-identifier">CreateCompatibleDC</span><span class="hl-brackets">(</span><span class="hl-identifier">destHDC</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">// 画像ファイルを読み込む
</span><span class="hl-identifier">HBITMAP bitmap</span><span class="hl-default"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">HBITMAP</span><span class="hl-brackets">)</span><span class="hl-identifier">LoadImage</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">,
                                    </span><span class="hl-identifier">TEXT</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">madoka.bmp</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-comment">// 読み込むファイル名
                                    </span><span class="hl-identifier">IMAGE_BITMAP</span><span class="hl-code">,
                                    </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">,
                                    </span><span class="hl-identifier">LR_LOADFROMFILE</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">// srcHDC に bitmap を適用する
</span><span class="hl-identifier">SelectObject</span><span class="hl-brackets">(</span><span class="hl-identifier">srcHDC</span><span class="hl-code">, </span><span class="hl-identifier">bitmap</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">// 画像を転送する
</span><span class="hl-identifier">BitBlt</span><span class="hl-brackets">(</span><span class="hl-identifier">destHDC</span><span class="hl-code">,  </span><span class="hl-comment">// 描画先（ HDC ）
       </span><span class="hl-number">320</span><span class="hl-code">, </span><span class="hl-number">240</span><span class="hl-code">, </span><span class="hl-comment">// 描画先の左上座標
       </span><span class="hl-number">32</span><span class="hl-code">, </span><span class="hl-number">32</span><span class="hl-code">,   </span><span class="hl-comment">// 転送する幅
       </span><span class="hl-identifier">srcHDC</span><span class="hl-code">,   </span><span class="hl-comment">// 転送元（ HDC ）
       </span><span class="hl-number">120</span><span class="hl-code">, </span><span class="hl-number">100</span><span class="hl-code">, </span><span class="hl-comment">// 転送元の左上座標
       </span><span class="hl-identifier">SRCCOPY</span><span class="hl-brackets">)</span><span class="hl-default">; </span><span class="hl-comment">// 転送方式

// 使い終わったリソースを解放する
</span><span class="hl-identifier">DeleteObject</span><span class="hl-brackets">(</span><span class="hl-identifier">bitmap</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-identifier">DeleteDC</span><span class="hl-brackets">(</span><span class="hl-identifier">srcHDC</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-identifier">ReleaseDC</span><span class="hl-brackets">(</span><span class="hl-identifier">hWnd</span><span class="hl-code">, </span><span class="hl-identifier">destHDC</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/323/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>デバイスコンテキスト</title>
		<link>http://www.game-create.com/archives/321</link>
		<comments>http://www.game-create.com/archives/321#comments</comments>
		<pubDate>Thu, 10 Apr 2008 02:05:00 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[BMP]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[Win32API]]></category>
		<category><![CDATA[デバイスコンテキスト]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=321</guid>
		<description><![CDATA[デバイスコンテキストとは Win32API を通じてグラフィックを描画（表示）するために、ディスプレイ、ウィンドウ、メモリ、プリンタといったデバイスを抽象化したデータです。


デバイスコンテキストという形に抽象化される [...]]]></description>
			<content:encoded><![CDATA[<p>デバイスコンテキストとは Win32API を通じてグラフィックを描画（表示）するために、ディスプレイ、ウィンドウ、メモリ、プリンタといったデバイスを抽象化したデータです。</p>
<p><a href="http://www.game-create.com/wp-content/uploads/2008/04/device_context.gif" title="デバイスコンテキストとプログラムの関係" rel="lightbox"><img src="http://www.game-create.com/wp-content/uploads/2008/04/device_context.thumbnail.gif" alt="デバイスコンテキストとプログラムの関係" /></a></p>
<p><span id="more-321"></span></p>
<p>デバイスコンテキストという形に抽象化されることによって、同じ関数で異なるデバイスにグラフィックを描画（表示）することができるようになります。たとえば、ディスプレイに四角形を描くための関数は Rectangle() ですが、プリンタに四角形を印字するための関数も Rectangle() です。</p>
<p>プログラムはデバイスコンテキストへ直接アクセスすることはできません。デバイスコンテキストを通じてグラフィックを描画（表示）するためには、デバイスコンテキストからデバイスコンテキストハンドルを取得し、そのハンドルを描画関数へ渡します。デバイスコンテキストからデバイスコンテキストハンドルを取得するためには GetDC() 関数を使います。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// ディスプレイのデバイスコンテキストハンドルを取得
</span><span class="hl-identifier">HDC display</span><span class="hl-default"> = </span><span class="hl-identifier">GetDC</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">// ディスプレイに四角形を描画
</span><span class="hl-identifier">Rectangle</span><span class="hl-brackets">(</span><span class="hl-identifier">display</span><span class="hl-code">, </span><span class="hl-number">100</span><span class="hl-code">, </span><span class="hl-number">100</span><span class="hl-code">, </span><span class="hl-number">200</span><span class="hl-code">, </span><span class="hl-number">200</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-mlcomment">/* 中略 */

</span><span class="hl-comment">// デバイスコンテキストを解放
</span><span class="hl-identifier">ReleaseDC</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-code">, </span><span class="hl-identifier">display</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<p>ディスプレイやウィンドウなどのデバイスコンテキストは Windows によって自動的に生成されますが、ビットマップの読み込み先となるメモリなどのデバイスコンテキストは、あとから自分で用意する必要があります。</p>
<p>ゲームの場合は、画像ファイルの読み込み先としてデバイスコンテキストを生成するケースがほとんどです。この場合、デバイスコンテキストは CreateCompatibleDC() 関数によって生成します。 CreateCompatibleDC() 関数は、第１引数にデバイスコンテキストハンドルを受け取り、そのハンドルが示すデバイスコンテキストと互換性のあるデバイスコンテキストを生成します。互換性のあるデバイスコンテキスト同士は、グラフィックを相互に転送することができます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// ディスプレイのデバイスコンテキストハンドルを取得
</span><span class="hl-identifier">HDC display</span><span class="hl-default"> = </span><span class="hl-identifier">GetDC</span><span class="hl-brackets">(</span><span class="hl-prepro">NULL</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">// ビットマップの読み込み先のデバイスコンテキストを生成
</span><span class="hl-identifier">HDC memory</span><span class="hl-default"> = </span><span class="hl-identifier">CreateCompatibleDC</span><span class="hl-brackets">(</span><span class="hl-identifier">display</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-mlcomment">/* 中略 */

</span><span class="hl-comment">// デバイスコンテキストを解放（ CreateCompatibleDC() で作った場合は DeleteDC() ）
</span><span class="hl-identifier">DeleteDC</span><span class="hl-brackets">(</span><span class="hl-identifier">memory</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">// デバイスコンテキストを解放（ GetDC() で取得した場合は ReleaseDC() ）
</span><span class="hl-identifier">ReleaseDC</span><span class="hl-brackets">(</span><span class="hl-identifier">display</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<p>使い終わったデバイスコンテキストは解放する必要があります。 GetDC() によって取得したデバイスコンテキストは ReleaseDC() 関数、 CreateCompatibleDC() 関数で生成したデバイスコンテキストは DeleteDC() 関数によって解放します。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/321/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>画像ファイルを LoadImage() 関数で読み込めるようにする</title>
		<link>http://www.game-create.com/archives/308</link>
		<comments>http://www.game-create.com/archives/308#comments</comments>
		<pubDate>Sun, 30 Mar 2008 08:05:21 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[BMP]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[VC++ 2008 EE]]></category>
		<category><![CDATA[Win32API]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=308</guid>
		<description><![CDATA[画像ファイルを LoadImage() 関数で読み込めるようにするためには、読み込みたい画像ファイルをプロジェクトファイルが格納されているディレクトリにコピーします。

通常、 LoadImage() 関数によって画像を [...]]]></description>
			<content:encoded><![CDATA[<p>画像ファイルを LoadImage() 関数で読み込めるようにするためには、読み込みたい画像ファイルをプロジェクトファイルが格納されているディレクトリにコピーします。</p>
<p><span id="more-308"></span></p>
<p>通常、 LoadImage() 関数によって画像を読み込もうとすると、実行しているファイル（ *.exe ファイル）が配置されている場所からファイルを探そうとします。しかし、開発中はプロジェクトディレクトリに画像ファイルをコピーすれば、画像が読み込めるようになります。</p>
<p>では、プロジェクトディレクトリとはどこかというと、 Visual C++ 2008 の場合は *.vcproj ファイルが格納されているディレクトリです。場所が非常にわかりづらいので、プライドを捨ててコンピュータ内を検索した方が早いと思います。たとえば SampleGame という名前でプロジェクトを作った場合は SampleGame.vcproj というワードでコンピュータ内を検索します。見つかった SampleGame.vcproj と同じディレクトリに画像ファイルをコピーすることで LoadImage() 関数から読み込めるようになります。</p>
<p>ちなみに次のようなケースでは、画像ファイルをプロジェクトディレクトリにコピーする必要はありません。</p>
<ul>
<li>画像ファイルを絶対パスで読み込む</li>
<li>画像ファイルをリソースから読み込む</li>
</ul>
<p>この方法については、後ほど解説したいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/308/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>メルマガ用「デスクトップへの図形描画」サンプル 2008/03/23 版</title>
		<link>http://www.game-create.com/archives/300</link>
		<comments>http://www.game-create.com/archives/300#comments</comments>
		<pubDate>Sat, 22 Mar 2008 06:50:24 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[GDI]]></category>
		<category><![CDATA[Win32API]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[メルマガ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=300</guid>
		<description><![CDATA[メルマガで制作中のデスクトップへの図形描画サンプルです。

デスクトップに簡単な図形を描画します。

デスクトップへの図形描画サンプル

]]></description>
			<content:encoded><![CDATA[<p>メルマガで制作中のデスクトップへの図形描画サンプルです。</p>
<p><span id="more-300"></span></p>
<p>デスクトップに簡単な図形を描画します。</p>
<ul>
<li><a href="http://www.game-create.com/wp-content/uploads/manuals/articles/samples/Win32API_Sample_0007/Win32API_Sample_0007_20080323.lzh">デスクトップへの図形描画サンプル</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/300/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

