在Visual C++中实现调色板动画依赖于MFC类库提供的CPalette类和CDC类中的诺干成员函数,其基本步骤如下:
(1)调用CPalette::CreatePalette(LPLOGPALETTE lpLogPalette)函数创建逻辑调色板,注意将参数LPLOGPALETTE 所指向的各颜色表项结构的peFlags域设置为PC_RESERVED,以防止其他窗口同该调色板匹配颜色;
(2)调用CDC::SelectPalette和CDC::RealizePalette函数选择和实现所创建的逻辑调色板;
(3)调用CPalette::AnimatePalette函数改变颜色,实现调色板动画;
(4)动画完成后应恢复系统调色板.
CPalette::AnimatePalette是其中最关键的函数,其原型如下:
void AnimatePalette{
UINT nStartIndex, //起始的表项号
UINT nNumEntries, //变化的表项数
LPPAletteENTRY lpPaletteColors}; //逻辑调色板表项指针
lpPaletteColors 为指向PALETTEENTY结构的指针,其中存储着逻辑调色板将要更新的颜色信息,PALETTEENTRY结构定义如下:
typedef struct tagPALETTEENTRY {//pe
BYTE peRed;
BYTE peGreen;
BYTE peBlue;
BYTE peFlags;
}PALETTEENTRY;
peRed、peGreen、peBlue分别表示逻辑调色板项的R、G、B颜色分量值.peFlags应被置为PC_RESERVED.
nStartIndex 为lpPaletteColors 中将变化的起始表项号,nNumentries 为lpPalettecolors中将变化的表项数.