Jasmine的文章

  • 使用AnimateWindow函数实现窗口显示关闭滚动和滑动特效

    背景我们在开发自己的程序的时候,应该都想把自己的程序加上酷炫的界面和酷炫的特效,让人眼前一亮吧。不管你想不想,反正,我一直都想这么做的,只不过是由于水平有限而已。
    在没有了解 AnimateWindow 这个API函数之前,我以为要实现一个窗口淡出淡入的特效是比较复杂的。但,在了解 AnimateWindow 函数之后才发现,原来就是那么一两行代码的问题。
    现在,我把使用 AnimateWindow 函数实现窗口淡出淡入效果的实现思路以及实现过程,写成文档分享给大家。
    函数介绍AnimateWindow 函数
    在显示与隐藏窗口时能产生特殊的效果。有两种类型的动画效果:滚动动画和滑动动画。
    函数声明
    BOOL AnimateWindow( HWND hWnd, DWORD dwTime, DWORD dwFlags);
    参数

    hWnd:指定产生动画的窗口的句柄。
    dwTime:指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒。
    dwFags:指定动画类型。这个参数可以是一个或多个下列标志的组合。标志描述:




    VALUE
    MEANING




    AW_SLIDE
    使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略


    AW_ACTIVATE
    激活窗口。在使用了AW_HIDE标志后不要使用这个标志


    AW_BLEND
    使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志


    AW_HIDE
    隐藏窗口,缺省则显示窗口


    AW_CENTER
    若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展


    AW_HOR_POSITIVE
    自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略


    AW_VER_POSITIVE
    自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略


    AW_VER_NEGATIVE
    自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略


    AW_HOR_NEGATIVE
    自右向左显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略



    返回值

    如果函数成功,返回值为非零;
    如果函数失败,返回值为零。在下列情况下函数将失败:
    窗口使用了窗口边界;窗口已经可见仍要显示窗口;窗口已经隐藏仍要隐藏窗口。若想获得更多错误信息,请调用GetLastError函数。


    实现原理根据 AnimateWindow 函数的介绍,我们可以知道只要设置 AnimateWindow 函数中的参数,就可以实现窗口的特效效果。
    其中,最后一个参数,则指定了使用哪种特效。
    例如,本文给出的示例:
    滚动效果,自下向上显示窗口:
    ::AnimateWindow(hWnd, 3000, AW_VER_NEGATIVE);
    滑动效果,淡出:
    ::AnimateWindow(hWnd, 3000, AW_HIDE | AW_BLEND);
    编码实现BOOL CALLBACK ProgMainDlg(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam){ if (WM_INITDIALOG == uiMsg) { // 滚动 ::AnimateWindow(hWnd, 3000, AW_VER_NEGATIVE); } else if (WM_CLOSE == uiMsg) { // 滑动 ::AnimateWindow(hWnd, 3000, AW_HIDE | AW_BLEND); // 关闭窗口 ::EndDialog(hWnd, NULL); } return FALSE;}
    程序测试直接运行程序,窗口弹出时淡入,关闭窗口时淡出。所以,测试成功。由于特效是动态的,所以从截图上可能看不出什么变化,但是还是放 2 张截图。


    总结AnimateWindow 函数的使用不是很复杂,大家只要对照着函数介绍去正确使用参数就可以实现想要实现的效果了。
    1  留言 2018-11-07 10:15:31

发送私信

当你成功时,谁还在乎你的过去

11
文章数
13
评论数
eject