Platform SDK: DirectX

ウィンドウ モードでのパレットの作成

[C++]

次の例で、非排他 (ウィンドウ) モードで DirectDraw パレットをどのように作成するかを示す。パレットを正しく作用させるために、IDirectDraw7::CreatePalette メソッドに渡した PALETTEENTRY 構造体の 256 エントリのそれぞれをセット アップすることがきわめて重要となる。

LPDIRECTDRAW7        lpDD; // 初期化されていると仮定する。
PALETTEENTRY         pPaletteEntry[256]; 
int                  index; 
HRESULT              ddrval; 
LPDIRECTDRAWPALETTE2 lpDDPal; 
 
// Windows スタティック エントリを設定する。
for (index = 0; index < 10 ; index++) 
{ 
    // 最初の 10 スタティック エントリ
    pPaletteEntry[index].peFlags = PC_EXPLICIT; 
    pPaletteEntry[index].peRed = index; 
    pPaletteEntry[index].peGreen = 0; 
    pPaletteEntry[index].peBlue = 0; 
 
    // 最後の 10 スタティック エントリ
    pPaletteEntry[index+246].peFlags = PC_EXPLICIT; 
    pPaletteEntry[index+246].peRed = index+246; 
    pPaletteEntry[index+246].peGreen = 0; 
    pPaletteEntry[index+246].peBlue = 0; 
} 
 
// ここで、プライベート エントリをセット アップする。この例では、
// 利用可能な最初の 16 エントリがアニメーションされる。
for (index = 10; index < 26; index ++) 
{ 
    pPaletteEntry[index].peFlags = PC_NOCOLLAPSE|PC_RESERVED; 
    pPaletteEntry[index].peRed = 255; 
    pPaletteEntry[index].peGreen = 64; 
    pPaletteEntry[index].peBlue = 32; 
} 
 
// ここで残りのエントリ (アニメーションしないエントリ) をセット アップする。
for (; index < 246; index ++) // 前のループでインデックスが設定される。
{ 
    pPaletteEntry[index].peFlags = PC_NOCOLLAPSE; 
    pPaletteEntry[index].peRed = 25; 
    pPaletteEntry[index].peGreen = 6; 
    pPaletteEntry[index].peBlue = 63; 
} 
 
// すべての 256 エントリを埋め込む。パレットを作成する。
ddrval = lpDD->CreatePalette(DDPCAPS_8BIT, pPaletteEntry, 
    &lpDDPal,NULL); 
[Visual Basic]

次の例で、非排他 (ウィンドウ) モードで DirectDraw パレットをどのように作成するかを示す。パレットを正しく作用させるために、DirectDraw7.CreatePalette メソッドに渡した PALETTEENTRY 型の 256 のエントリのそれぞれをセット アップすることがきわめて重要となる。

Dim pPaletteEntry(255) As PALETTEENTRY
Dim index As Long
Dim ddpal As DirectDrawPalette
     
' Windows スタティック エントリを設定する。
For index = 0 To 9
' 最初の 10 スタティック エントリ
        pPaletteEntry(index).flags = PC_EXPLICIT
        pPaletteEntry(index).red = index
        pPaletteEntry(index).green = 0
        pPaletteEntry(index).blue = 0
        
' 最後の 10 スタティック エントリ
pPaletteEntry(index + 246).flags = PC_EXPLICIT
pPaletteEntry(index + 246).red = index + 246
pPaletteEntry(index + 246).green = 0
pPaletteEntry(index + 246).blue = 0
Next
    
' ここで、プライベート エントリをセット アップする。この例では、
' 利用可能な最初の 16 エントリがアニメーションされる。
    For index = 10 To 25
        pPaletteEntry(index).flags = PC_NOCOLLAPSE Or PC_RESERVED
        pPaletteEntry(index).red = 255
        pPaletteEntry(index).green = 64
        pPaletteEntry(index).blue = 32
    Next
    
' ここで残りのエントリ (アニメーションしないエントリ) を ' セット アップする。
    For index = 26 To 246
        pPaletteEntry(index).flags = PC_NOCOLLAPSE
        pPaletteEntry(index).red = 25
        pPaletteEntry(index).green = 6
        pPaletteEntry(index).blue = 63
    Next
    
' すべての 256 エントリを埋め込む。パレットを作成する。
Set ddpal = dd.CreatePalette(DDPCAPS_8BIT, pPaletteEntry())