Windows界面开发-如何用VC实现淡入淡出的动画特技

发布于 2016-12-31 17:33:50 字数 48 浏览 1385 评论 2

在程序中加入适当的动画效果能够使程序更加生动活泼,要实现淡入淡出的效果,要如何做?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浮生未歇 2017-07-10 12:12:36

让位图A逐渐消失,让位图B逐渐显示出来,办法是:
在已经显示的位图A上,不断开些小洞,在小洞内显示位图B的象素,随着小洞越来越多,位图A越来越模糊,位图B越来越清晰,最后,位图A消失,位图B完整地显示出来。
实际实现的时候,可以用画刷在位图A上打洞,并以位图B的像素填入。不断改变画刷,使洞越来越多,最后完成整个过程。

晚风撩人 2017-01-07 06:21:04

1.窗口效果的淡入淡出可以用AnimateWindow

void CAboutDlg::OnClose()
{
AnimateWindow(GetSafeHwnd(), 500, AW_BLEND | AW_HIDE); //淡出0.5秒
CDialog::OnClose();
}
int CAboutDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
CenterWindow(); //居中
::AnimateWindow(GetSafeHwnd(), 500, AW_BLEND); //淡入0.5秒
return 0;
}

2.图片等的淡入淡出效果可以用AlphaBlend或者通过修改alpha通道,来达到淡入淡出效果

void AlphaDisplay(CDC &pDC, CClientDC &dc, BLENDFUNCTION& rBlendProps, int width, int heigh, byte nLevel)
{
//nLevel是透明度,0表示不显示,255则完全显示
rBlendProps.SourceConstantAlpha = nLevel;
AlphaBlend( dc.m_hDC, 0, 0, width, heigh, pDC.m_hDC, 0, 0,
width, heigh, rBlendProps );
}

UINT tdDisplay(LPVOID lpParam)
{
CAlphaCtrl* AlphaCtrl = (CAlphaCtrl*)lpParam; CClientDC dc(AlphaCtrl);
CDC pDC;
pDC.CreateCompatibleDC(&dc);
pDC.SelectObject(&AlphaCtrl->Bmp); BLENDFUNCTION rBlendProps;
rBlendProps.BlendOp = AC_SRC_OVER;
rBlendProps.BlendFlags = 0;
rBlendProps.AlphaFormat = 0; BITMAP bmInfo;
::GetObject( AlphaCtrl->Bmp.m_hObject, sizeof(BITMAP), &bmInfo );
INT nWidth, nHeigh;
nWidth = bmInfo.bmWidth;
nHeigh = bmInfo.bmHeight;AlphaCtrl->SetWindowPos(NULL, 0, 0, nWidth, nHeigh, SWP_NOMOVE);
int i = 0;
while(i <= 255)
{
AlphaCtrl->AlphaDisplay(pDC, dc, rBlendProps, nWidth, nHeigh, i);
i += 5;
Sleep(AlphaCtrl->nTimer);
}
AlphaCtrl->bCanPaint = 1; //Make OnPaint Word
AfxEndThread(0);
return 0;
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文