レガシー Windows API(概要)について

ここで紹介しているAPIは、Windows95、Windows NT3.5時代のAPI群であり、最新のAPIは含まれていないことに注しして欲しい。なお、当時の解説書は現在よりもより詳細に解説しているため、参考になるはずである。

  • レイアウトを変換する際、崩れているページがあります。
  • 概要およびSampleコードはありますが、APIの解説はありません。

ご要望があれば旧版のWin32 API(HELP形式)をお譲りします。問い合わせフォームより申し込みください。

Windows API ラスタ オペレーション コード

このトピックでは、 グラフィック デバイス インターフェイス (GDI) が使用する、 2元および3元ラスタ オペレーションを一覧表にして説明します。2元ラスタ オペレーションは、 ペンと転送先のビットマップの2つのオペランドを使います。3元ラスタ オペレーションは、 転送元のビットマップ、 ブラシ、 転送先のビットマップの3つのオペランドを使います。2元および3元ラスタ オペレーションは、 どちらもブール値の演算子を使います。

 

2元ラスタ オペレーション

ここでは、 GetROP2関数とSetROP2関数が使用する、 2元ラスタ オペレーション コードを一覧表にして示します。ラスタ オペレーション コードは、 選択されているペンから得るビットと転送先のビットマップのビットを、 GDIがどのように組み合わせるかを指定します。

各ラスタ オペレーション コードは、 ブール値の演算を表します。このブール値の演算で選択したペンと転送先のビットマップは組み合わされます。これらの演算で使われるオペランドは次の2つです。

 

オペランド 意味

P 選択されたペン

D 転送先のビットマップ

これらの演算で使われるブール値の演算子は次の通りです。

演算子 意味

a ビット単位の論理積 (AND)

n ビット単位の論理否定 (NOT)

o ビット単位の論理和 (OR)

x ビット単位の排他論理和 (XOR)

 

すべてのブール値の演算は、 逆ポーランド式表記法で表記されます。たとえば、 次の演算は、 転送先ビットマップ内のピクセル値を、 ペンと選択されたブラシのピクセル値の組み合わせに置き換えます。

 

DPo

各ラスタ オペレーション コードは32ビットの整数で、 この整数の上位ワードがブール値の演算インデックス、 下位ワードが演算コードとなります。16ビットの演算インデックスは、 2つのパラメータのブール演算の結果を表す0拡張型の8ビット値です (この場合、 ペンと転送先の値に対する値です)。たとえば、 DPo演算とDPan演算のための演算インデックスは次の表のようになります。

 

P D DPo DPan

0 0 0 1

0 1 1 1

1 0 1 1

1 1 1 0

 

次の表では、 描画モードとブール演算についての概略を示します。

 

ラスタ オペレーション ブール演算

R2_BLACK 0

R2_COPYPEN P

R2_MASKNOTPEN DPna

R2_MASKPEN DPa

R2_MASKPENNOT PDna

R2_MERGENOTPEN DPno

R2_MERGEPEN DPo

R2_MERGEPENNOT PDno

R2_NOP D

R2_NOT Dn

R2_NOTCOPYPEN Pn

R2_NOTMASKPEN DPan

R2_NOTMERGEPEN DPon

R2_NOTXORPEN DPxn

R2_WHITE 1

R2_XORPEN DPx

 

 

モノクロ デバイスでは、 GDIは黒に値0を、 白に値1をマップします。アプリケーションが、 利用可能な2元ラスタ オペレーションを使用して、 白色の転送先の上に黒色のペンで描画すると、 次のような結果になります。

 

ラスタ オペレーション 結果

R2_BLACK 黒色の線 (可視)

R2_COPYPEN 黒色の線 (可視)

R2_MASKNOTPEN 白色の線 (不可視)

R2_MASKPEN 黒色の線 (可視)

R2_MASKPENNO 黒色の線 (可視)

R2_MERGENOTPEN 白色の線 (不可視)

R2_MERGEPEN 黒色の線 (可視)

R2_MERGEPENNOT 黒色の線 (可視)

R2_NOP 白色の線 (不可視)

R2_NOT 黒色の線 (可視)

R2_NOTCOPYPEN 白色の線 (不可視)

R2_NOTMASKPEN 白色の線 (不可視)

R2_NOTMERGEPEN 黒色の線 (可視)

R2_NOTXORPEN 黒色の線 (可視)

R2_WHITE 白色の線 (不可視)

R2_XORPEN 白色の線 (不可視)

 

カラー デバイスでは、 GDIはRGB値でペン、 または転送先の色を表します。RGBカラー値はlong整数です。この整数は赤、 緑、 青の色フィールドから構成され、 それぞれのフィールドが指定された色の輝度を指定します。輝度の範囲は0から255です。値はlong整数の3個の下位バイトにパックされます。ペンの色は必ず単一の色ですが、 転送先の色は、 2色または3色が混じりあった色を使うことができます。アプリケーションが、 利用可能な2元ラスタ オペレーションを使用して、 青の転送先の上に白いペンで描画すると、 次のような結果になります。

 

ラスタ オペレーション 結果

R2_BLACK 黒色の線 (可視)

R2_COPYPEN 白色の線 (可視)

R2_MASKNOTPEN 黒色の線 (可視)

R2_MASKPEN 青色の線 (不可視)

R2_MASKPENNOT 赤色または緑色の線 (可視)

R2_MERGENOTPEN 青色の線 (不可視)

R2_MERGEPEN 白色の線 (可視)

R2_MERGEPENNOT 白色の線 (可視)

R2_NOP 青色の線 (不可視)

R2_NOT 赤色または緑色の線 (可視)

R2_NOTCOPYPEN 黒色の線 (可視)

R2_NOTMASKPEN 赤色または緑色の線 (可視)

R2_NOTMERGEPEN 黒色の線 (可視)

R2_NOTXORPEN 青色の線 (不可視)

R2_WHITE 白色の線 (可視)

R2_XORPEN 赤色または緑色の線 (可視)

 

3元ラスタ オペレーション

ここでは、 BitBltPatBltStretchBlt関数が使う、 3元ラスタ オペレーション コードを一覧表にして示します。3次元ラスタ オペレーション コードは、 GDIが転送元のビットマップのビットと転送先のビットマップのビットを結合する方法を定義します。

各ラスタ オペレーション コードはブール値の演算を表し、 この演算で、 転送もとのピクセルの値、 選択したブラシ、 および転送先が結合されます。これらの演算で使われるオペランドは次の3つです。

 

オペランド 意味

D 転送先のビットマップ

P 選択されたブラシ (パターンともいう)

S 転送元のビットマップ

 

 

これらの演算で使われるブール値の演算子は、 次のとおりです。

 

演算子 意味

a ビット単位の論理積 (AND)

n ビット単位の論理否定 (NOT)

o ビット単位の論理和 (OR)

x ビット単位の排他論理和 (XOR)

 

 

すべてのブール値の演算は、 逆ポーランド式表記法で表記されます。たとえば、 次の演算は、 転送先ビットマップ内のピクセル値を、 転送元と選択されたブラシのピクセル値の組み合わせに置き換えます。

 

PSo

次の演算は、 転送元とブラシと転送先を結合します (同じ機能を表現する方法がほかにもあります。表には特に記していませんが、 その方法は次のような形になります)。

 

DPSoo

各ラスタ オペレーション コードは32ビットの整数で、 この整数の上位ワードがブール値の演算インデックス、 下位ワードが演算コードとなります。16ビットの演算インデックスは、 ブラシ、 転送先、 転送元のパラメータに関するブール値の演算の結果を表す0拡張型の8ビット値です。たとえば、 PSo演算とDPSoo演算のための演算インデックスは次の表のようになります。

 

P S D PSo DPSoo

0 0 0 0 0

0 0 1 0 1

0 1 0 1 1

0 1 1 1 1

1 0 0 1 1

1 0 1 1 1

1 1 0 1 1

1 1 1 1 1

演算インデックス: 00FCh 00FEh

 

ここでは、 PSoの演算インデックスは00FC (下のビットから読んでください)、 DPSooの演算インデックスは00FEです。これらの値は、 対応するラスタ オペレーション コードの位置を定義します。これは、 以下のラスタ オペレーション コードの表に示されます。PSo演算は表の252 (00FCh) 行目にあり、 DPSooは254 (00FEh) 行目にあります。

一般的に使われるラスタ オペレーションには、 Windowsのインクルード ファイルWINDOWS.H.で特定の名前が与えられています。アプリケーション内では、 できるだけそれらの名前を使った方がよいでしょう。

転送元または転送先がモノクロのときには、 ビット値0は黒いピクセルを、 ビット値1は白いピクセルを表します。転送元または転送先がカラーのときは、 その色はRGB値で表されます。

 

ラスタ オペレーション コード

 

ブール値の演算 (16進法) ラスタ オペレーション (16進法) ブール値の演算 (逆ポーランド表記) 名称

  • 00 00000042 0 BLACKNESS
  • 01 00010289 DPSoon -
  • 02 00020C89 DPSona -
  • 03 000300AA PSon -
  • 04 00040C88 SDPona -
  • 05 000500A9 DPon -
  • 06 00060865 PDSxnon -
  • 07 000702C5 PDSaon -
  • 08 00080F08 SDPnaa -
  • 09 00090245 PDSxon -
  • 0A 000A0329 DPna -
  • 0B 000B0B2A PSDnaon -
  • 0C 000C0324 SPna -
  • 0D 000D0B25 PDSnaon -
  • 0E 000E08A5 PDSonon -
  • 0F 000F0001 Pn -
  • 10 00100C85 PDSona -
  • 11 001100A6 DSon NOTSRCERASE
  • 12 00120868 SDPxnon -
  • 13 001302C8 SDPaon -
  • 14 00140869 DPSxnon -
  • 15 001502C9 DPSaon -
  • 16 00165CCA PSDPSanaxx -
  • 17 00171D54 SSPxDSxaxn -
  • 18 00180D59 SPxPDxa -
  • 19 00191CC8 SDPSanaxn -
  • 1A 001A06C5 PDSPaox -
  • 1B 001B0768 SDPSxaxn -
  • 1C 001C06CA PSDPaox -
  • 1D 001D0766 DSPDxaxn -
  • 1E 001E01A5 PDSox -
  • 1F 001F0385 PDSoan -
  • 20 00200F09 DPSnaa -
  • 21 00210248 SDPxon -
  • 22 00220326 DSna -
  • 23 00230B24 SPDnaon -
  • 24 00240D55 SPxDSxa -
  • 25 00251CC5 PDSPanaxn -
  • 26 002606C8 SDPSaox -
  • 27 00271868 SDPSxnox -
  • 28 00280369 DPSxa -
  • 29 002916CA PSDPSaoxxn -
  • 2A 002A0CC9 DPSana -
  • 2B 002B1D58 SSPxPDxaxn -
  • 2C 002C0784 SPDSoax -
  • 2D 002D060A PSDnox -
  • 2E 002E064A PSDPxox -
  • 2F 002F0E2A PSDnoan -
  • 30 0030032A PSna -
  • 31 00310B28 SDPnaon -
  • 32 00320688 SDPSoox -
  • 33 00330008 Sn NOTSRCCOPY
  • 34 003406C4 SPDSaox -
  • 35 00351864 SPDSxnox -
  • 36 003601A8 SDPox -
  • 37 00370388 SDPoan -
  • 38 0038078A PSDPoax -
  • 39 00390604 SPDnox -
  • 3A 003A0644 SPDSxox -
  • 3B 003B0E24 SPDnoan -
  • 3C 003C004A PSx -
  • 3D 003D18A4 SPDSonox -
  • 3E 003E1B24 SPDSnaox -
  • 3F 003F00EA PSan -
  • 40 00400F0A PSDnaa -
  • 41 00410249 DPSxon -
  • 42 00420D5D SDxPDxa -
  • 43 00431CC4 SPDSanaxn -
  • 44 00440328 SDna SRCERASE
  • 45 00450B29 DPSnaon -
  • 46 004606C6 DSPDaox -
  • 47 0047076A PSDPxaxn -
  • 48 00480368 SDPxa -
  • 49 004916C5 PDSPDaoxxn -
  • 4A 004A0789 DPSDoax -
  • 4B 004B0605 PDSnox -
  • 4C 004C0CC8 SDPana -
  • 4D 004D1954 SSPxDSxoxn -
  • 4E 004E0645 PDSPxox -
  • 4F 004F0E25 PDSnoan -
  • 50 00500325 PDna -
  • 51 00510B26 DSPnaon -
  • 52 005206C9 DPSDaox -
  • 53 00530764 SPDSxaxn -
  • 54 005408A9 DPSonon -
  • 55 00550009 Dn DSTINVERT
  • 56 005601A9 DPSox -
  • 57 00570389 DPSoan -
  • 58 00580785 PDSPoax -
  • 59 00590609 DPSnox -
  • 5A 005A0049 DPx PATINVERT
  • 5B 005B18A9 DPSDonox -
  • 5C 005C0649 DPSDxox -
  • 5D 005D0E29 DPSnoan -
  • 5E 005E1B29 DPSDnaox -
  • 5F 005F00E9 DPan -
  • 60 00600365 PDSxa -
  • 61 006116C6 DSPDSaoxxn -
  • 62 00620786 DSPDoax -
  • 63 00630608 SDPnox -
  • 64 00640788 SDPSoax -
  • 65 00650606 DSPnox -
  • 66 00660046 DSx SRCINVERT
  • 67 006718A8 SDPSonox -
  • 68 006858A6 DSPDSonoxxn -
  • 69 00690145 PDSxxn -
  • 6A 006A01E9 DPSax -
  • 6B 006B178A PSDPSoaxxn -
  • 6C 006C01E8 SDPax -
  • 6D 006D1785 PDSPDoaxxn -
  • 6E 006E1E28 SDPSnoax -
  • 6F 006F0C65 PDSxnan -
  • 70 00700CC5 PDSana -
  • 71 00711D5C SSDxPDxaxn -
  • 72 00720648 SDPSxox -
  • 73 00730E28 SDPnoan -
  • 74 00740646 DSPDxox -
  • 75 00750E26 DSPnoan -
  • 76 00761B28 SDPSnaox -
  • 77 007700E6 DSan -
  • 78 007801E5 PDSax -
  • 79 00791786 DSPDSoaxxn -
  • 7A 007A1E29 DPSDnoax -
  • 7B 007B0C68 SDPxnan -
  • 7C 007C1E24 SPDSnoax -
  • 7D 007D0C69 DPSxnan -
  • 7E 007E0955 SPxDSxo -
  • 7F 007F03C9 DPSaan -
  • 80 008003E9 DPSaa -
  • 81 00810975 SPxDSxon -
  • 82 00820C49 DPSxna -
  • 83 00831E04 SPDSnoaxn -
  • 84 00840C48 SDPxna -
  • 85 00851E05 PDSPnoaxn -
  • 86 008617A6 DSPDSoaxx -
  • 87 008701C5 PDSaxn -
  • 88 008800C6 DSa SRCAND
  • 89 00891B08 SDPSnaoxn -
  • 8A 008A0E06 DSPnoa -
  • 8B 008B0666 DSPDxoxn -
  • 8C 008C0E08 SDPnoa -
  • 8D 008D0668 SDPSxoxn -
  • 8E 008E1D7C SSDxPDxax -
  • 8F 008F0CE5 PDSanan -
  • 90 00900C45 PDSxna -
  • 91 00911E08 SDPSnoaxn -
  • 92 009217A9 DPSDPoaxx -
  • 93 009301C4 SPDaxn -
  • 94 009417AA PSDPSoaxx -
  • 95 009501C9 DPSaxn -
  • 96 00960169 DPSxx -
  • 97 0097588A PSDPSonoxx -
  • 98 00981888 SDPSonoxn -
  • 99 00990066 DSxn -
  • 9A 009A0709 DPSnax -
  • 9B 009B07A8 SDPSoaxn -
  • 9C 009C0704 SPDnax -
  • 9D 009D07A6 DSPDoaxn -
  • 9E 009E16E6 DSPDSaoxx -
  • 9F 009F0345 PDSxan -
  • A0 00A000C9 DPa -
  • A1 00A11B05 PDSPnaoxn -
  • A2 00A20E09 DPSnoa -
  • A3 00A30669 DPSDxoxn -
  • A4 00A41885 PDSPonoxn -
  • A5 00A50065 PDxn -
  • A6 00A60706 DSPnax -
  • A7 00A707A5 PDSPoaxn -
  • A8 00A803A9 DPSoa -
  • A9 00A90189 DPSoxn -
  • AA 00AA0029 D -
  • AB 00AB0889 DPSono -
  • AC 00AC0744 SPDSxax -
  • AD 00AD06E9 DPSDaoxn -
  • AE 00AE0B06 DSPnao -
  • AF 00AF0229 DPno -
  • B0 00B00E05 PDSnoa -
  • B1 00B10665 PDSPxoxn -
  • B2 00B21974 SSPxDSxox -
  • B3 00B30CE8 SDPanan -
  • B4 00B4070A PSDnax -
  • B5 00B507A9 DPSDoaxn -
  • B6 00B616E9 DPSDPaoxx -
  • B7 00B70348 SDPxan -
  • B8 00B8074A PSDPxax -
  • B9 00B906E6 DSPDaoxn -
  • BA 00BA0B09 DPSnao -
  • BB 00BB0226 DSno MERGEPAINT
  • BC 00BC1CE4 SPDSanax -
  • BD 00BD0D7D SDxPDxan -
  • BE 00BE0269 DPSxo -
  • BF 00BF08C9 DPSano -
  • C0 00C000CA PSa MERGECOPY
  • C1 00C11B04 SPDSnaoxn -
  • C2 00C21884 SPDSonoxn -
  • C3 00C3006A PSxn -
  • C4 00C40E04 SPDnoa -
  • C5 00C50664 SPDSxoxn -
  • C6 00C60708 SDPnax -
  • C7 00C707AA PSDPoaxn -
  • C8 00C803A8 SDPoa -
  • C9 00C90184 SPDoxn -
  • CA 00CA0749 DPSDxax -
  • CB 00CB06E4 SPDSaoxn -
  • CC 00CC0020 S SRCCOPY
  • CD 00CD0888 SDPono -
  • CE 00CE0B08 SDPnao -
  • CF 00CF0224 SPno -
  • D0 00D00E0A PSDnoa -
  • D1 00D1066A PSDPxoxn -
  • D2 00D20705 PDSnax -
  • D3 00D307A4 SPDSoaxn -
  • D4 00D41D78 SSPxPDxax -
  • D5 00D50CE9 DPSanan -
  • D6 00D616EA PSDPSaoxx -
  • D7 00D70349 DPSxan -
  • D8 00D80745 PDSPxax -
  • D9 00D906E8 SDPSaoxn -
  • DA 00DA1CE9 DPSDanax -
  • DB 00DB0D75 SPxDSxan -
  • DC 00DC0B04 SPDnao -
  • DD 00DD0228 SDno -
  • DE 00DE0268 SDPxo -
  • DF 00DF08C8 SDPano -
  • E0 00E003A5 PDSoa -
  • E1 00E10185 PDSoxn -
  • E2 00E20746 DSPDxax -
  • E3 00E306EA PSDPaoxn -
  • E4 00E40748 SDPSxax -
  • E5 00E506E5 PDSPaoxn -
  • E6 00E61CE8 SDPSanax -
  • E7 00E70D79 SPxPDxan -
  • E8 00E81D74 SSPxDSxax -
  • E9 00E95CE6 DSPDSanaxxn -
  • EA 00EA02E9 DPSao -
  • EB 00EB0849 DPSxno -
  • EC 00EC02E8 SDPao -
  • ED 00ED0848 SDPxno -
  • EE 00EE0086 DSo SRCPAINT
  • EF 00EF0A08 SDPnoo -
  • F0 00F00021 P PATCOPY
  • F1 00F10885 PDSono -
  • F2 00F20B05 PDSnao -
  • F3 00F3022A PSno -
  • F4 00F40B0A PSDnao -
  • F5 00F50225 PDno -
  • F6 00F60265 PDSxo -
  • F7 00F708C5 PDSano -
  • F8 00F802E5 PDSao -
  • F9 00F90845 PDSxno -
  • FA 00FA0089 DPo -
  • FB 00FB0A09 DPSnoo PATPAINT
  • FC 00FC008A PSo -
  • FD 00FD0A0A PSDnoo -
  • FE 00FE02A9 DPSoo -
  • FF 00FF0062 1 WHITENESS

 

▲ページトップに戻る

【本を読んでもよくらからない】 … 個別指導でわかりやすくお教えします