ExcelVBAゲームプログラミング?

初心者でもきっとできる!
Excelさえ持っていれば特別なソフトは不要!
すぐにでも始められる簡単ゲームプログラミング!
今すぐ始めよう!

サンプルやゲームのダウンロードができる別館も好評運営中です。
ご意見やご質問、ゲームの感想等は掲示板までお気軽に。是非、皆さんの声を聞かせてください。運営、開発の励みになります。



各種ダウンロードはコチラ ↓ 意見・感想・質問はコチラ ↓
影倉庫 Shadow warehouse サポート掲示板
ブログの全体像はコチラ ↓ リンクのページはコチラ ↓
サイトマップ 自分本位なリンク


スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。






Chapter.138 [ APIによる描画処理10:マスク描画 概念編 ]

■マスク処理

前回は、BitBlt 関数のラスタオペレーションについて解説しました。
ラスタオペレーションひとつで、随分と描画結果が変化しましたね。各ラスタオペレーションの詳細な意味合いはともかく、たったひとつの関数でいろんなことができそうだということは感じていただけたのではないかと思います。

さて、今回からはラスタオペレーションを活用して、さらなる描画の高みであるマスク描画処理をやっていきます。

今回はまず、マスク処理とはなんなのか、そしてそれを実現するための概念とはどんなものなのか、この二点に絞って解説していきたいと思っています。
細かいことはいいからやり方だけ載せろ! という声が聞こえなくもないですが、マスク処理の概念を理解することは、プログラマとしての地力をつけるいいチャンスでもあると個人的には思います。ですから、やり方だけ知りたいとか、コードだけ掲載してくれればそれでいいとか、そういうふうに感じる方は今回の講座があまり役に立たないかもしれませんが、そこは割り切って読んでいただけるとよろしいかと。


さて、それでは早速ですがマスク処理について解説していきましょう。

このテキストを読んでいる皆さんは、マスク描画処理と言われて内容をすんなりイメージできるでしょうか。
マスク処理は言い換えると透過処理とも表現できます。要するに、描画するビットマップの背景など、特定の部分だけを透過して描画する手法のことです。

マスク描画を行なうことによって、今までは矩形でしか描画できなかったビットマップが、背景を透過させてキャラクターのみを描画するなど、柔軟に処理できるようになります。シューティングゲームにしても RPG にしても、キャラクターの全てが真四角なんてことは普通はありませんね。キャラクターの部分だけを描画し、余分なところは透過できるマスク処理を習得することによって、ゲームの表現力は飛躍的にアップします。概念は多少複雑かもしれませんが、習得できれば必ず役に立ちます。がんばって取り組んでいただければと思います。


■マスク処理に必要な色の論理演算

以前の講座でも少し触れましたが、ラスタオペレーションを駆使すると、様々な色の論理演算を行うことが可能です。マスク処理にも、この色の論理演算による合成が大活躍するわけですが、そもそも色の論理演算っていったいどういうことなのか、理解できるでしょうか。

いくつかのラスタオペレーションでは、AND や OR や、あるいは XOR などの論理演算を用いて色を合成します。そしてその代表例が、SRCPAINT SRCAND のふたつのラスタオペレーションです。

 SRCPAINT = OR 演算子でコピー元の色とコピー先の色を組み合わせる
 SRCAND = AND 演算子でコピー元の色とコピー先の色を組み合わせる

これらのラスタオペレーションの特性をうまく利用することによって、背景を透過するなどの特殊な描画が可能になります。具体的には、SRCPAINT を用いた場合には黒が、そして SRCAND を用いた場合には白が、透過されて描画されなくなります。

ただし、これには転送先の背景の色が大きく影響します。実はここが非常にわかりにくい部分なのですが、ゆっくりじっくり解説しますので、焦らず少しずつ理解していってください。


■色を数値で表す RGB という考え方

VB、もしくは VBA には、RGB 関数というものが存在します。何度か当講座でも使ったことがありますが、わからない人のために一応解説しますと、この関数はみっつの引数を取り、それぞれ、赤・緑・青の色の強さを 256 段階で指定できます。

たとえば、みっつの引数全てに 0 を指定した場合には、これは黒を表します。全ての色の強度がゼロなので、黒になるわけですね。逆に、全ての引数に 255 を指定した場合には、これは白になります。光の三原色の原理で考えると、全ての色の強度が最大なので真っ白になってしまうわけです。

RGB(0, 0, 0) ←
RGB(255, 255, 255) ←
RGB(255, 0, 0) ←
RGB(0, 255, 0) ←
RGB(0, 0, 255) ←
RGB(255, 255, 0) ←
RGB(0, 255, 255) ←
RGB(255, 0, 255) ←
RGB(120, 120, 0) ←
RGB(0, 120, 120) ←
RGB(120, 0, 120) ←

このような、色を三原色で表現する方法は、HTML などでも使われていますね。
そして、赤・緑・青のみっつの色をそれぞれ 256 段階で表現できるわけですから、最大で 16777216 色もの多くの色を表現できることになります。(256 の 3 乗)

さて、ここからが本題です。
パソコンのディスプレイ上の色は、上記のように RGB によって表現することが可能です。いかなる色であっても、それを単なる見た目上の色ではなく、もっと具体的な数値というデータによって表現することが可能なわけです。

そして、数値で表すことができるということは、それを計算する、あるいは演算することも可能であるということがわかりますね。人間の頭のなかでは、色の合成といったら絵の具を混ぜるようなイメージで考えてしまいがちですが、パソコンのなかでは色でさえも全て数値によって演算することが可能なわけです。

たとえば、赤と青を足してみたらどうなるでしょうか。

RGB(255,   0,   0) ←
        +
RGB(  0,   0, 255) ←
        ||
RGB(255,   0, 255) ←

はい、このように見事に色が混ざり合います。

ラスタオペレーションを用いた色の演算処理も、実際にはこれと同じように数値を用いた演算が行なわれているだけなのです。色は、人間にとっては数値と結びつき難く、あくまでも脳内でイメージするという感覚のものですが、プログラム上では全て数値データとして扱うことが可能なわけですね。


■そして色の論理演算

さて、ここまで来ると、どうしてラスタオペレーションによって特定の色が透過されて描画されなくなるのか、それが理解できるまでもう一歩のところまで来ています。

あとは、論理演算のその意味さえ理解できてしまえば、どうしてマスク描画が可能なのか理解できるはずです。

AND と OR は、プログラミングをしていると比較的いろんなところで利用しますね。
対象となるふたつのデータがいずれも真の場合のみ真となる AND。
対象となるふたつのデータのうち、いずれかが真であれば真となる OR。
いずれも、ここで解説するまでもないプログラミングの基本中の基本ですね。

さて、色の論理演算でも、ここから少し発展させて考えれば同じように考えることが可能です。

ここはもう少し詳しく説明しますが、一点、注意してほしいことがあります。
これから解説する論理演算の仕組みは、あくまでも、マスク処理がどうして実現できるのかを理解するために、あえて極端に話をわかりやすくした解説になっています。
というのも、論理演算自体をゼロから全て解説してしまうと、講座が非常に冗長になってしまいます。ですので、あくまでも理解のしやすさを重視したテキストになっていますので、その点には注意してください。


さて、本来、RGB 関数による色の諧調は 256 段階ですが、ここでは話をわかりやすくするために、色の諧調を 5 段階で考えてみます。0 を含め、1、2、3、4 で 5 段階ですね。

:例
□ □ □ □ ← 0
■ ■ □ □ ← 2
■ ■ ■ ■ ← 4


さて、それでは 1 と 3 で AND をとるとどうなるでしょうか。

■ □ □ □ ← 1
        AND
■ ■ ■ □ ← 3
        ||
        ???

この答え、わかりますか?

答えは 1 です。なぜかと言えば、AND 演算なので、共に真となっているところまでが、真になるからですね。上の四角形を左側から順に見ていけばわかりますね。双方共に■になっているのは 1 までです。ですから、1 と 3 で AND をとると、答えは 1 となるわけです。

■ □ □ □ ← 1
        AND
■ ■ ■ □ ← 3
        ||
■ □ □ □ ← 1


それでは、次のような OR 演算はどうでしょうか。

■ ■ ■ □ ← 3
        OR
■ ■ □ □ ← 2
        ||
        ???

さきほどの AND 演算と同じように考えれば、これは簡単なのではないでしょうか。
こちらの答えは 3 が正解です。OR 演算は、いずれかが真であれば真になります。つまり、左側から見ていって、どちらかが■になっているところまでが真になるわけですから、答えは 3 となるわけです。

色の論理演算は、赤・緑・青のそれぞれの色の強度を、上記のように論理演算することで最終的な色を決定します。先ほどと同じように考えると、次の問題もすんなり解けるのではないでしょうか。

RGB(100, 100, 100)
     AND
RGB( 80, 100, 120)
     ||
RGB(???, ???, ???)

さぁ、どうでしょうか。それぞれ RGB の値がいくつになるのか、答えがわかったでしょうか。

AND 演算は、いずれも真の場合にのみ、結果が真となる演算でしたね。

ですから、正解は以下のようになります。

RGB(80, 100, 100)

こうですね。
焦らず落ち着いて考えれば、わかると思います。

それでは以下の OR 演算はどうでしょう。こちらもすんなりわかるでしょうか。

RGB(200, 150, 100)
     OR
RGB(100, 200, 150)
     ||
RGB(???, ???, ???)

OR 演算では、いずれかが真であれば結果が真になります。
ですから答えは……

RGB(200, 200, 150)

こうなりますね。
これも、焦らずじっくり考えてみれば、案外簡単なのではないでしょうか。

補足コラム:論理演算と2進数
今回の講座では、ANDやORを用いた論理演算について解説していますが、本来、論理演算とは2進数を用いて計算されるものです。
2進数という言葉の意味がわからないという人はいないと思いますが、2進数を用いれば10進数の10は1010になりますし、100は1100100になります。要は、0と1というふたつの数字だけを使って数の大小を表記する方法ですね。
先ほど、RGBの各要素をAND演算した結果の例を載せましたね。それが以下ですね。
RGB(100, 100, 100)
     AND
RGB(80, 100, 120)
     ||
RGB(80, 100, 100)
実は、本来の論理演算では、このような単純な計算結果にはなりません。それでは実際にはどうなるのかというと、正確には以下のようになります。
RGB(100, 100, 100)
     AND
RGB(80, 100, 120)
     ||
RGB(64, 100, 96)
これが正解です。
論理演算とは、数値を2進数に変換したあと、各桁ごとにANDやORなどの論理演算を行い、その結果得られた解が本来の答えとなる計算方法です。今回の講座では、80と100のANDは80であると本文中で表記しましたが、実際の論理演算のルールに基づけば64が正しい答えです。
どうしてこのような形を採ったのかと言えば、第一にはあくまでもわかりやすさを重視したためです。第二には論理演算を解説していると非常に本文が長くなってしまうからですね。
もし、論理演算について、もっと詳しく知りたいという要望があれば、別の記事として講座に含めるかもしれませんが、今回は理解を助けるために、あえてわかりやすさを重視しました。もし、論理演算についてもっと詳しく知りたいという人は自分で調べてみるといいでしょう。



■黒や白が透過されてしまう理由

さて、このように、色の論理演算はわかってしまえばそれほど難しい概念ではありませんね。落ち着いて考えてみれば、色が論理演算によって合成されるということの意味も、なんとなく理解できるはずです。

さて、それではどうして、ラスタオペレーションの種類によって白や黒といった特定の色が透過され、描画されなくなってしまうのでしょう。一見すると不思議なこの現象も、論理演算の仕組みがわかっていれば簡単です。

RGB 関数を使って、白や黒を表す場合には次のようになります。

RGB(0, 0, 0) ← 黒
RGB(255, 255, 255) ← 白

このことからもわかるように、RGB 関数の全ての要素が 0 の場合には黒が、逆に全ての要素が MAX (つまり 255)の場合には白が、RGB 関数によって表されます。

このように、各要素が最大、あるいは最小の色を、他の色と AND や OR によって論理演算で処理したら、果たして結果はどうなるでしょうか。

SRCAND のラスタオペレーションで描画する際には、色が AND 演算されるんでしたね。ということは、白と黒、いずれかを別の色と論理演算すると結果は以下のようになります。

:黒との論理演算
RGB(0, 0, 0)
     AND
RGB(X, Y, Z)
     ||
RGB(0, 0, 0)

AND 演算は、いずれも真の場合にのみ真になる演算方法です。つまり、黒と AND 演算された全ての色は、合成した結果、全て強制的に黒に塗り替えられてしまうわけですね。

白と AND による論理演算を行なった場合にはどうでしょうか。

:白との論理演算
RGB(255, 255, 255)
     AND
RGB(X, Y, Z)
     ||
RGB(X, Y, Z)

黒の場合とは、全く逆のことが起こります。全ての色の強度が最大となっている白の場合には、合成される色がどのような色であっても、AND 演算してしまうと、結果として完全に掻き消されてしまうわけです。つまり、AND 演算では白は完全に透過され、描画されなくなってしまうわけです。

少しややこしいかもしれませんが、先ほどの例題を思い出して、考えてみてください。頭を柔らかくして考えれば、必ず理解できるはずです。


さて、少し駆け足ですが、OR 演算の場合も考えてみましょう。
SRCPAINT というラスタオペレーションを用いれば、OR 演算による色の合成を行うことが可能です。白の場合と黒の場合、それぞれ考えてみましょう。

:黒との論理演算
RGB(0, 0, 0)
     OR
RGB(X, Y, Z)
     ||
RGB(X, Y, Z)

OR 演算では、どちらかが真であれば真です。
つまり、黒は色の強度の全ての要素が 0 なわけですから、完全に掻き消されて消えてしまうことがわかりますね。

白との OR による論理演算はどうでしょう。

:白との論理演算
RGB(255, 255, 255)
     OR
RGB(X, Y, Z)
     ||
RGB(255, 255, 255)

OR 演算で処理した場合には、白は全ての要素が最大なので、OR 演算すると絶対に全てを塗り替えて真っ白にしてしまいます。

これらのことから、AND 演算を行なうと白が、OR 演算を行なうと黒が、それぞれ掻き消されてしまうことがわかりますね。
これこそが、マスク処理のトリックなのです。

論理演算を用いることによって、白や黒は、意図的に描画しないようにすることが可能となります。そして、このような論理演算と白黒の特性をうまく利用することで、キャラクターの部分だけを描画し背景を透過して表示するなどの、特殊な描画処理を行なうことができるようになるわけですね。

少しややこしいですが、けしてものすごく難しいことというわけでもありません。
落ち着いてじっくり、考えてみてください。


■まとめ

さて、色の論理演算、いかがだったでしょうか。
前回の講座で、背景が白の場合と黒の場合、さらには背景がカラーの場合とをそれぞれ掲載しましたが、その意味がわかったんじゃないかなと思います。

今回の講座の内容を終えて、論理演算の仕組みが理解できたうえで前回の講座の画像一覧を眺めてみれば、どうして描画結果が様々に変化したのかがわかるはずです。SRCPAINT SRCAND で描画した場合には、背景色の影響で真っ黒になったり真っ白になったり、あるいは透けたように合成されて描画されたり、いろいろなことが起こっていたはずです。それらの現象の全ては、今回解説した色の論理演算によって引き起こされていたわけです。

次回は、いよいよ実際にマスク処理を行なってみます。
理屈ではわかっていても、実際に色が透けると、なんとなく感心してしまいます。あの驚きを、皆さんにも感じていただけたらなと思っています。

まずは、今回の講座をじっくりと読み解き、色の論理演算の仕組みについてしっかり理解してください。そうすることで、必ず将来的に役立つ基礎的な知識を習得できるはずです。



■格言

AND と OR 演算についてざっくりと理解する
特定の色は論理演算によって透過される


少々難しい内容ではありますが、まぁ、焦らず考えればわかります。がんばりましょう。

スポンサーサイト






メールフォーム

影斬に物申すという方はこちら

名前 :
メール:
件名 :
本文 :

可能な限り要望には応えますが、必ず返信や回答ができることを、保障するものではありません。
ご了承ください。

Chapters

コンテンツ一覧


■Chapter 一覧■
    全てのChapterの一覧です。
    直接アクセスしたい方はこちらをご利用下さい。

    Chapter.1 [ 知っておくべき心得 ]
    Chapter.2 [ Excelってなんだろう ]
    Chapter.3 [ Excelの基本画面 ]
    Chapter.4 [ VBAとは? ]
    Chapter.5 [ モジュールについて ]
    Chapter.6 [ 変数 ]
    Chapter.7 [ 変数の型と宣言 ]
    Chapter.8 [ プロシージャとスコープ ]
    Chapter.9 [ ゲームつくる様々な手法 ]
    Chapter.10 [ ユーザーフォーム ]
    Chapter.11 [ プロパティウィンドウ ]
    Chapter.12 [ 乱数 ]
    Chapter.13 [ 条件分岐 ]
    Chapter.14 [ ゲーム画面のデザイン ]
    Chapter.15 [ コード記述の基本作法 ]
    Chapter.16 [ じゃんけんゲーム:1 名前をつける ]
    Chapter.17 [ じゃんけんゲーム:2 フォームの起動 ]
    Chapter.18 [ じゃんけんゲーム:3 乱数の種 ]
    Chapter.19 [ じゃんけんゲーム:4 イベント ]
    Chapter.20 [ じゃんけんゲーム:5 引数 ]
    Chapter.21 [ じゃんけんゲーム:6 役判定 ]
    Chapter.22 [ じゃんけんゲーム:7 予測と制限 ]
    Chapter.23 [ Withステートメント ]
    Chapter.24 [ 画像を表示させる ]
    Chapter.25 [ 画像表示の発展形 ]
    Chapter.26 [ 繰り返し処理 For文 ]
    Chapter.27 [ 繰り返し処理 Do~Loop文 ]
    Chapter.28 [ Exitステートメント ]
    Chapter.29 [ フォーム上の位置情報 ]
    Chapter.30 [ API基礎知識 ]
    Chapter.31 [ API補足知識 ]
    Chapter.32 [ メインループを考える ]
    Chapter.33 [ 同期処理の概念 ]
    Chapter.34 [ 移動処理その1:画面設定と考え方 ]
    Chapter.35 [ 移動処理その2:DoEvents ]
    Chapter.36 [ 移動処理その3:キー入力判定API ]
    Chapter.37 [ 条件分岐のさらなる探求 Select Case ]
    Chapter.38 [ アニメーション ]
    Chapter.39 [ 配列変数 ]
    Chapter.40 [ ゲームの初期化 ]
    Chapter.41 [ シューティングゲーム1:ゲーム設計 ]
    Chapter.42 [ シューティングゲーム2:メインプロセス ]
    Chapter.43 [ シューティングゲーム3:構造体 ]
    Chapter.44 [ シューティングゲーム4:定数 ]
    Chapter.45 [ シューティングゲーム5:プレイヤーキャラクター ]
    Chapter.46 [ シューティングゲーム6:ショットを撃つ① ]
    Chapter.47 [ シューティングゲーム7:ショットを撃つ② ]
    Chapter.48 [ シューティングゲーム8:Mod演算子の活用 ]
    Chapter.49 [ シューティングゲーム9:敵キャラクター登場 ]
    Chapter.50 [ シューティングゲーム10:衝突判定 ]
    Chapter.51 [ シューティングゲーム11:衝突の実体 ]
    Chapter.52 [ シューティングゲーム12:敵の攻撃 ]
    Chapter.53 [ シューティングゲーム13:爆発エフェクト ]
    Chapter.54 [ シューティングゲーム14:残機数表示① ]
    Chapter.55 [ シューティングゲーム15:残機数表示② ]
    Chapter.56 [ シューティングゲーム16:スコアの表示 ]
    Chapter.57 [ シューティングゲーム17:タイトル画面 ]
    Chapter.58 [ シューティングゲーム18:ボスキャラクター ]
    Chapter.59 [ シューティングゲーム19:最後の仕上げへ ]
    Chapter.60 [ シューティングゲーム20:いよいよ完成STG ]
    Chapter.61 [ カードゲームで使えるめくり効果 ]
    Chapter.62 [ ラジアンと角度 ]
    Chapter.63 [ ラジアンの活用:円運動 ]
    Chapter.64 [ ラジアンの活用:任意の角度へ移動する ]
    Chapter.65 [ APIによるサウンド再生:基礎 ]
    Chapter.66 [ APIによるサウンド再生:MIDIと多重再生 ]
    Chapter.67 [ APIによるサウンド再生:MCIコマンドとループ再生 ]
    Chapter.68 [ Function プロシージャ ]
    Chapter.69 [ 値渡しと参照渡し ]
    Chapter.70 [ デバッグ1:イミディエイトウィンドウ ]
    Chapter.71 [ デバッグ2:ローカルウィンドウ ]
    Chapter.72 [ デバッグ3:コード実行の中断 ]
    Chapter.73 [ オブジェクトってなんだ ]
    Chapter.74 [ プロパティ・メソッド・イベント ]
    Chapter.75 [ オブジェクト変数 ]
    Chapter.76 [ オブジェクトとコレクション ]
    Chapter.77 [ 特殊な繰り返し:For Each ]
    Chapter.78 [ エラー処理 ]
    Chapter.79 [ On Error と GoTo文 ]
    Chapter.80 [ Resumeステートメント ]
    Chapter.81 [ バイトとビット ]
    Chapter.82 [ ウィンドウメッセージとイベント ]
    Chapter.83 [ 文字列の基礎 ]
    Chapter.84 [ 文字列操作① ]
    Chapter.85 [ 文字列操作② ]
    Chapter.86 [ タイピングゲーム1:仕様を決める ]
    Chapter.87 [ タイピングゲーム2:キー入力検知 ]
    Chapter.88 [ タイピングゲーム3:文字列照合 ]
    Chapter.89 [ タイピングゲーム4:判定関数 ]
    Chapter.90 [ タイピングゲーム5:ゲーム画面設計 ]
    Chapter.91 [ タイピングゲーム6:問題文のソート ]
    Chapter.92 [ タイピングゲーム7:動的配列 ]
    Chapter.93 [ タイピングゲーム8:キーダウンイベント ]
    Chapter.94 [ タイピングゲーム9:正打数の表示 ]
    Chapter.95 [ タイピングゲーム10:タイムの表示 ]
    Chapter.96 [ クリックゲーム1:イベントの種類 ]
    Chapter.97 [ クリックゲーム2:画面設計 ]
    Chapter.98 [ クリックゲーム3:クリック座標検知 ]
    Chapter.99 [ クリックゲーム4:キャラクター準備 ]
    Chapter.100 [ クリックゲーム5:キャラクターの配置 ]
    Chapter.101 [ クリックゲーム6:キャラクター移動とNot演算子 ]
    Chapter.102 [ クリックゲーム7:クリックのヒット判定 ]
    Chapter.103 [ クリックゲーム8:ヒットマークエフェクト ]
    Chapter.104 [ クリックゲーム9:サウンド処理の実装 ]
    Chapter.105 [ クリックゲーム10:マウスカーソルの変更 ]
    Chapter.106 [ ブロック崩しゲーム1:仕様と概要を決める ]
    Chapter.107 [ ブロック崩しゲーム2:基本概念の確認 ]
    Chapter.108 [ ブロック崩しゲーム3:ベクトルとは ]
    Chapter.109 [ ブロック崩しゲーム4:変数や定数の宣言 ]
    Chapter.110 [ ブロック崩しゲーム5:初期化処理の実装 ]
    Chapter.111 [ ブロック崩しゲーム6:ブロックの配置 ]
    Chapter.112 [ ブロック崩しゲーム7:根幹処理とバーの処理 ]
    Chapter.113 [ ブロック崩しゲーム8:線分と線分の交差を判定 ]
    Chapter.114 [ ブロック崩しゲーム9:線分同士の交点 ]
    Chapter.115 [ ブロック崩しゲーム10:ボールの処理 ]
    Chapter.116 [ ブロック崩しゲーム11:最終調整して完成へ ]
    Chapter.117 [ テキストファイル操作基礎 ]
    Chapter.118 [ テキストファイル操作:読み込み編 ]
    Chapter.119 [ テキストファイル操作:CSV読み込み編 ]
    Chapter.120 [ テキストファイル操作:様々な読込編 ]
    Chapter.121 [ テキストファイル操作:バイナリ編 ]
    Chapter.122 [ テキストファイル操作:暗号化編 ]
    Chapter.123 [ テキストファイル操作:復号化編 ]
    Chapter.124 [ クラスモジュールとは ]
    Chapter.125 [ クラスモジュール:メソッド編 ]
    Chapter.126 [ クラスモジュール:プロパティ編 ]
    Chapter.127 [ クラスモジュール:イベント拡張編 ]
    Chapter.128 [ クラスモジュール:イベント自作編 ]
    Chapter.129 [ APIによる描画処理1:ハンドル ]
    Chapter.130 [ APIによる描画処理2:デバイスコンテキスト ]
    Chapter.131 [ APIによる描画処理3:ペン オブジェクト ]
    Chapter.132 [ APIによる描画処理4:ブラシ オブジェクト ]
    Chapter.133 [ APIによる描画処理5:図形描画準備編 ]
    Chapter.134 [ APIによる描画処理6:図形描画実践編 ]
    Chapter.135 [ APIによる描画処理7:画像描画の仕組み編 ]
    Chapter.136 [ APIによる描画処理8:ビットブロック転送編 ]
    Chapter.137 [ APIによる描画処理9:ラスタオペレーション ]
    Chapter.138 [ APIによる描画処理10:マスク描画 概念編 ]
    Chapter.139 [ APIによる描画処理11:マスク描画 実践編 ]


    コードやVBAに関する質問などはサポート掲示板(別館)までお気軽にどうぞ。




fc2 seotool Excel VBA ゲーム プログラミング 講座

Counter

twitter


Shadow BBS - 影掲示板

VBA 関連書籍



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。