WEB开发网
开发学院软件开发VC VC++部件库中浮动菜单部件的解析及应用 阅读

VC++部件库中浮动菜单部件的解析及应用

 2010-08-22 20:48:33 来源:WEB开发网   
核心提示:三、渐显渐显就是将显示颜色由黑色(RGB(0,0,0))逐渐变化为图象各象素的颜色的过程,开始时调用CPalette::GetPaletteEntries函数保存图象调色板的各逻辑表项信息,VC++部件库中浮动菜单部件的解析及应用(3),然后调用CPalette::SetPaletteEntries函数将逻辑调色板中各

三、渐显

渐显就是将显示颜色由黑色(RGB(0,0,0))逐渐变化为图象各象素的颜色的过程。开始时调用CPalette::GetPaletteEntries函数保存图象调色板的

各逻辑表项信息,然后调用CPalette::SetPaletteEntries函数将逻辑调色板中各逻辑表项的peRed、peGreen、peBlue置为0,定时调用CPalette::Anima-tePalette,每次将各逻辑表项的peRed、peGreen、peBlue值增加一个变化量,直到它们分别等于图象逻辑调色板中各逻辑表项的peRed、peGreen、peBlue值。

下面的函数FadeIn通过对调色板颜色表项中的各颜色分量值先设为0,然后进行递增,直到所有颜色值都恢复成原调色板中颜色值来实现渐显。  // 图象渐显效果
// 参数:
// pWnd -显示图象的窗口
// pPal -调色板指针
// nDeta -各颜色分量的减小量
// uTimeOut -时间的变化量
void FadeIn(CWnd *pWnd, CPalette *pPal, int nDeta, UINT uTimeOut)
  {
//保留原来的调色板颜色表项
int nTotalColors = pPal- >GetEntryCount();
PALETTEENTRY PaletteColors0[256];
pPal- >GetPaletteEntries(0, nTotalColors, PaletteColors0);
  //先将调色板表项中各颜色分量置为0
PALETTEENTRY PaletteColors1[256];
for (int i=0; i< nTotalColors; ++i)
{
PaletteColors1[i].peRed = 0;
PaletteColors1[i].peGreen = 0;
PaletteColors1[i].peBlue = 0;
PaletteColors1[i].peFlags = PC_RESERVED;
}
pPal- >SetPaletteEntries(0, nTotalColors, PaletteColors1);
pPal- >AnimatePalette(0, nTotalColors, PaletteColors1);
  //设置时间码
pWnd- >SetTimer(0x100, uTimeOut, NULL);
  //开始渐显
pWnd- >SetCapture();
BOOL bDone = FALSE;
MSG msg;
while (! bDone)
{
if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_TIMER && msg.wParam == 0x100)
{
CClientDC dc(pWnd);
CPalette *pOldPal = dc.SelectPalette(pPal, FALSE);
dc.RealizePalette();
  //递增各颜色分量
PALETTEENTRY PaletteColors[256];
pPal- >GetPaletteEntries(0, nTotalColors, PaletteColors);
BOOL bRedZero=FALSE;
BOOL bGreenZero=FALSE;
BOOL bBlueZero=FALSE;
for (int i=0; i< nTotalColors; ++i)
{
if (PaletteColors[i].peRed + nDeta <
PaletteColors0[i].peRed)
{
PaletteColors[i].peRed += nDeta;
bRedZero = FALSE;
}
else if (PaletteColors[i].peRed + 1 <
PaletteColors0[i].peRed)
{
PaletteColors[i].peRed++;
bRedZero = FALSE;
}
else
bRedZero = TRUE;
if (PaletteColors[i].peGreen + nDeta <
PaletteColors0[i].peGreen)
{
PaletteColors[i].peGreen += nDeta;
bGreenZero = FALSE;
}
else if (PaletteColors[i].peGreen + 1 <
PaletteColors0[i].peGreen)
{
PaletteColors[i].peGreen++;
bGreenZero = FALSE;
}
else
bGreenZero = TRUE;
  if (PaletteColors[i].peBlue + nDeta <
PaletteColors0[i].peBlue)
{
PaletteColors[i].peBlue += nDeta;
bBlueZero = FALSE;
}
else if (PaletteColors[i].peBlue +1 <
PaletteColors0[i].peBlue)
{
PaletteColors[i].peBlue++;
bBlueZero = FALSE;
}
else
bBlueZero = TRUE;
}
//直到恢复原始值结束
bDone = bRedZero && bGreenZero && bBlueZero;
//使系统改变调色板
pPal- >AnimatePalette(0, nTotalColors, PaletteColors);
}
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
::ReleaseCapture();
pWnd- >KillTimer(0x100);
  //恢复原始调色板
pPal- >SetPaletteEntries(0, nTotalColors, PaletteColors0);
pPal- >AnimatePalette(0, nTotalColors, PaletteColors0);
}

上一页  1 2 3 4  下一页

Tags:VC 部件 浮动

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接