Windows界面开发-如何用VC实现淡入淡出的动画特技
在程序中加入适当的动画效果能够使程序更加生动活泼,要实现淡入淡出的效果,要如何做?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在程序中加入适当的动画效果能够使程序更加生动活泼,要实现淡入淡出的效果,要如何做?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
让位图A逐渐消失,让位图B逐渐显示出来,办法是:
在已经显示的位图A上,不断开些小洞,在小洞内显示位图B的象素,随着小洞越来越多,位图A越来越模糊,位图B越来越清晰,最后,位图A消失,位图B完整地显示出来。
实际实现的时候,可以用画刷在位图A上打洞,并以位图B的像素填入。不断改变画刷,使洞越来越多,最后完成整个过程。
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;
}