//创建调色板
LPDIRECTDRAWPALETTE lpDDPal = NULL;;
PALETTEENTRY* pPalette = (PALETTEENTRY*)g_PaletteColor;
if(FAILED(m_lpDD->CreatePalette(DDPCAPS_8BIT | DDPCAPS_INITIALIZE, 
pPalette, &lpDDPal, NULL)))
{
    return FALSE;
}
//设置关联
if(m_lpPrmy != NULL)
{
    if(FAILED(hResult = m_lpPrmy ->SetPalette(lpDDPal)))
    {
MessageBox(GetDirectDrawError(hResult), _T("错误"), MB_OK);  if(lpDDPal != NULL)
{
    lpDDPal->Release();
    lpDDPal = NULL;
}
return FALSE;
     }
}g_PaletteColor是一个颜色数组,256个元素,是这样定义的
#define RGB32(r, g, b) (PC_NOCOLLAPSE << 24 | b << 16 | g << 8 | r)COLORREF g_PaletteColor[256] = 
{
    RGB32(0, 0, 0), RGB32(128, 0, 0), ...
};
PALETTEENTRY* pPalette = (PALETTEENTRY*)g_PaletteColor;这样强制转换之后格式确实是对的,不明白哪里出错了

解决方案 »

  1.   

    应该是调色板格式和你的表面不兼容,贴出创建m_lpPrmy表面的代码看看。
      

  2.   

    DDPIXELFORMAT ddpf;
    memset(&ddpf, 0, sizeof(DDPIXELFORMAT));
    ddpf.dwSize = sizeof(DDPIXELFORMAT);
    ddpf.dwFlags = 8;
    ddpf.dwRGBBitCount = 8;
    //创建前端缓冲区
    ZeroMemory(&ddsd, sizeof(ddsd));
    //填写DDSURFACEDESC2结构
    ddsd.dwSize         = sizeof(ddsd);
    ddsd.dwFlags        = DDSD_CAPS;
    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY;
    ddsd.ddpfPixelFormat = ddpf;
    if(FAILED(hResult = m_lpDD->CreateSurface(&ddsd, &m_lpPrmy, NULL)))
    {
    MessageBox(GetDirectDrawError(hResult));
    return FALSE;
    }
    //设置调色板
    if(m_lpPrmy != NULL)
    {
    if(m_lpPrmy->IsLost())
    {
    m_lpPrmy->Restore();
    }
    if(FAILED(hResult = m_lpPrmy->SetPalette(lpDDPal)))
    {
    MessageBox(GetDirectDrawError(hResult));
    if(lpDDPal != NULL)
    {
    lpDDPal->Release();
    lpDDPal = NULL;
    }
    return FALSE;
    }
    }
    if(lpDDPal != NULL)
    {
    lpDDPal->Release();
    lpDDPal = NULL;
    }
      

  3.   

    ddpf.dwFlags = 8;你用数字表示,我看不出来到底是什么格式,而且我查了一下定义也没有值为8的标志位。要用调色板至少应该有DDPF_PALETTEINDEXEDTO8标志吧。
      

  4.   

    哦,呵呵,忘记了,DDPF_PALETTEINDEXEDTO8和DDPF_PALETTEINDEXED8这个我也试过了都不行,我就试试8,代表DDPF_PALETTEINDEXED4,忘记改过来了,反正都不行
      

  5.   

    DDPF_RGB | DDPF_PALETTEINDEXED8
      

  6.   

    RGB相关参数也要设置一下的啊。你找个教程好好看看,这么摸索太费事儿了。