怎样用vc实现文字的渐隐效果? 怎样用vc实现文字的渐隐效果? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 渐隐就是将显示颜色由图象各象素的颜色逐渐变化为黑色(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;}elsebRedZero = TRUE;if (PaletteColors[i].peGreen > nDeta){PaletteColors[i].peGreen -= nDeta;bGreenZero = FALSE;}else if (PaletteColors[i].peGreen > 1){PaletteColors[i].peGreen--;bGreenZero = FALSE;}elsebGreenZero = TRUE;if (PaletteColors[i].peBlue > nDeta){PaletteColors[i].peBlue -= nDeta;bBlueZero = FALSE;}else if (PaletteColors[i].peBlue > 1){PaletteColors[i].peBlue--;bBlueZero = FALSE;}elsebBlueZero = 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);} 超级简单问题 关于CEdit::MoveWindow()的一个问题 dao链接access数据库,查询的问题! 对话框问题 我想建立CCrypt类,怎么查看它的基类? 刚学VC,请叫联机编程问题???急急 CHTMLVIEW如何显示资源文件中的htm文件??? 请各位高手看看关于ado的问题:如何在程序中动态连接数据源(connection)? 界面的问题? 请问如何将ASP中定义的数组变量传入COM+组件中去,好象用SAFEARRAY不行呀! 有关Activex控件,可以加分 求教:字符串结束标志问题
下面的函数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);}