怎样用vc实现文字的渐隐效果?

listream1 2004-09-30 09:18:33
怎样用vc实现文字的渐隐效果?
...全文
77 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
54783szg 2004-09-30
  • 打赏
  • 举报
回复
渐隐就是将显示颜色由图象各象素的颜色逐渐变化为黑色(RGB(0, 0, 0))的过程,即定时调用CPalette::AnimatePalette,每次将各逻辑表项的peRed、peGreen、peBlue值减小一个变化量,直到它们都为0。
下面的函数FadeOut通过对调色板颜色表项中的各颜色分量值进行递减,直到所有颜色值都变成0(即黑色)来实现渐隐。
// 图象渐隐效果

// 参数:
// pWnd – 显示图象的窗口
// pPal – 调色板指针
// nDeta – 各颜色分量的减小量
// uTimeOut – 时间的变化量
void FadeOut(CWnd *pWnd, CPalette *pPal, int nDeta, UINT uTimeOut)
{
// 保留原来的调色板颜色表项
int nTotalColors = pPal->GetEntryCount();
PALETTEENTRY PaletteColors0[256];
pPal->GetPaletteEntries(0, nTotalColors, PaletteColors0);
// 设置时间码
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)
{
PaletteColors[i].peRed -= nDeta;
bRedZero = FALSE;
}

else if (PaletteColors[i].peRed > 1)
{
PaletteColors[i].peRed--;
bRedZero = FALSE;
}
else
bRedZero = TRUE;
if (PaletteColors[i].peGreen > nDeta)
{

PaletteColors[i].peGreen -= nDeta;
bGreenZero = FALSE;

}
else if (PaletteColors[i].peGreen > 1)
{

PaletteColors[i].peGreen--;
bGreenZero = FALSE;

}
else
bGreenZero = TRUE;

if (PaletteColors[i].peBlue > nDeta)
{

PaletteColors[i].peBlue -= nDeta;
bBlueZero = FALSE;

}
else if (PaletteColors[i].peBlue > 1)
{

PaletteColors[i].peBlue--;
bBlueZero = FALSE;

}
else
bBlueZero = TRUE;

}

// 如所有颜色分量都为0,则结束渐隐
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);

}

快乐鹦鹉 2004-09-30
  • 打赏
  • 举报
回复
定时修改文字的颜色

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧