Windows界面编程第六篇 动画启动效果(动画效果显示及隐藏窗口)
来源:互联网 发布:iti亲水性种植体 知乎 编辑:程序博客网 时间:2024/05/13 10:55
动画效果显示及隐藏窗口及大大美化程序界面,像QQ的登录窗口也是使用了动画效果显示及隐藏窗口。
本篇《Windows界面编程第六篇 动画启动效果(动画效果显示及隐藏窗口)》就来介绍下如何使用动画效果来显示隐藏窗口。为了方便代码复用,本人已经将其封装成一个窗口动画效果类,先来看看这个窗口动画效果类的实现吧。
头文件CAnimateWindow.h
- #pragma once
- //Windows界面编程第六篇 动画启动效果(动画效果显示及隐藏窗口)
- // http://blog.csdn.net/morewindows/article/details/8656068
- //By MoreWindows-(http://blog.csdn.net/MoreWindows)
- class CAnimateWindow
- {
- public:
- CAnimateWindow(HWND hwnd = NULL);
- void SetWindowHwnd(HWND hwnd);
- HWND GetWindowHwnd();
- BOOL AnimateWindow(DWORD dwTime = 400,BOOL bShow = TRUE,BOOL bSlide = TRUE);
- private:
- int GetRandomNumber();
- private:
- int m_nAnimateType;
- HWND m_hwndWindow;
- };
CPP文件CAnimateWindow.cpp
- //Windows界面编程第六篇 动画启动效果(动画效果显示及隐藏窗口)
- // http://blog.csdn.net/morewindows/article/details/8656068
- //By MoreWindows-(http://blog.csdn.net/MoreWindows)
- #include <windows.h>
- #include <stdlib.h>
- #include <time.h>
- #include "CAnimateWindow.h"
- CAnimateWindow::CAnimateWindow(HWND hwnd)
- {
- m_hwndWindow = hwnd;
- m_nAnimateType = GetRandomNumber();
- }
- void CAnimateWindow::SetWindowHwnd(HWND hwnd)
- {
- m_hwndWindow = hwnd;
- }
- HWND CAnimateWindow::GetWindowHwnd()
- {
- return m_hwndWindow;
- }
- BOOL CAnimateWindow::AnimateWindow(DWORD dwTime,BOOL bShow,BOOL bSlide)
- {
- DWORD dwFlags;
- dwFlags = bShow ? AW_ACTIVATE : AW_HIDE;
- dwFlags |= bSlide ? AW_SLIDE : AW_BLEND;
- if (m_nAnimateType == 0)
- dwFlags |= AW_HOR_POSITIVE;
- elseif (m_nAnimateType == 1)
- dwFlags |= AW_VER_POSITIVE;
- else
- dwFlags |= AW_CENTER;
- return ::AnimateWindow(m_hwndWindow, dwTime, dwFlags);
- }
- int CAnimateWindow::GetRandomNumber()
- {
- srand((UINT)time(NULL));
- return rand() % 3;
- }
代码非常简单,主要使用的是AnimateWindow函数。这个函数的函数原型如下:
BOOLAnimateWindow(
HWNDhwnd,
DWORDdwTime,
DWORDdwFlags
);
这个函数也极其简单,三个参数,一个表示窗口句柄,一个表示动画持续时间(毫秒),最后一个参数表示动画效果。可以有以下参数:
AW_SLIDE
Uses slide animation. By default, roll animation is used. This flag is ignored when used with AW_CENTER.
AW_ACTIVATE
Activates the window. Do not use this value with AW_HIDE.
AW_BLEND
Uses a fade effect. This flag can be used only if hwnd is a top-level window.
AW_HIDE
Hides the window. By default, the window is shown.
AW_CENTER
Makes the window appear to collapse inward if AW_HIDE is used or expand outward if the AW_HIDE is not used. The various direction flags have no effect.
AW_HOR_POSITIVE
Animates the window from left to right. This flag can be used with roll or slide animation. It is ignored when used with AW_CENTER or AW_BLEND.
AW_HOR_NEGATIVE
Animates the window from right to left. This flag can be used with roll or slide animation. It is ignored when used with AW_CENTER or AW_BLEND.
AW_VER_POSITIVE
Animates the window from top to bottom. This flag can be used with roll or slide animation. It is ignored when used with AW_CENTER or AW_BLEND.
AW_VER_NEGATIVE
Animates the window from bottom to top. This flag can be used with roll or slide animation. It is ignored when used with AW_CENTER or AW_BLEND.
参数有点多但归纳一下就知道分为水平方向,垂直方向,由里向外或由外向里这几种。
下面给出这个动画显示窗口类的使用范例。
代码中的CenterWindow是用来将窗口居中显示的,这个函数中的GetSystemMetrics(SM_CXSCREEN);和GetSystemMetrics(SM_CYSCREEN);可以参考《VC++获取屏幕大小第一篇像素大小GetSystemMetrics》。
- //Windows界面编程第六篇 动画启动效果(动画效果显示及隐藏窗口)
- // http://blog.csdn.net/morewindows/article/details/8656068
- //By MoreWindows-(http://blog.csdn.net/MoreWindows)
- #include "stdafx.h"
- #include "resource.h"
- #include "CAnimateWindow.h"
- BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
- //使窗口居中
- void CenterWindow(HWND hwnd);
- int APIENTRY WinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nCmdShow)
- {
- // TODO: Place code here.
- DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
- return 0;
- }
- BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
- {
- static HBRUSH s_hBrushDlgBackGround;
- static CAnimateWindow s_aw;
- switch (message)
- {
- case WM_INITDIALOG:
- {
- SetWindowText(hDlg,"窗口的动画显示和隐藏 - MoreWindows");
- // 加载背影图片
- HINSTANCE hinstance = (HINSTANCE)GetWindowLong(hDlg, GWL_HINSTANCE);
- HBITMAP hBitmap = LoadBitmap(hinstance, MAKEINTRESOURCE(IDB_BITMAP1));
- s_hBrushDlgBackGround = CreatePatternBrush(hBitmap);
- CenterWindow(hDlg);
- s_aw.SetWindowHwnd(hDlg);
- s_aw.AnimateWindow(600);
- }
- return FALSE;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDOK:
- case IDCANCEL:
- s_aw.AnimateWindow(400, FALSE);
- EndDialog(hDlg, FALSE);
- return TRUE;
- }
- break;
- case WM_CTLCOLORDLG:
- return (BOOL)s_hBrushDlgBackGround;
- }
- return FALSE;
- }
- //使窗口居中
- void CenterWindow(HWND hwnd)
- {
- RECT rcDlg;
- int nDlgWidth, nDlgHight;
- int nScreenWidth, nScreenHight;
- nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
- nScreenHight = GetSystemMetrics(SM_CYSCREEN);
- GetWindowRect(hwnd, &rcDlg);
- nDlgWidth = rcDlg.right - rcDlg.left;
- nDlgHight = rcDlg.bottom - rcDlg.top;
- MoveWindow(hwnd, (nScreenWidth - nDlgWidth) / 2, (nScreenHight - nDlgHight) / 2, nDlgWidth, nDlgHight, FALSE);
- }
运行效果如下所示,当然动画效果不好截图,大家可以从http://download.csdn.net/detail/morewindows/5128647下载(带源码且免积分),然后自己运行看下效果。
欢迎继续参考下面两篇《Windows界面编程第七篇文件拖拽(文件拖放)》和
《Windows界面编程第八篇 listbox彩色显示隔行变色》
- Windows界面编程第六篇 动画启动效果(动画效果显示及隐藏窗口)
- Windows界面编程第六篇 动画启动效果(动画效果显示及隐藏窗口)
- Windows界面编程第六篇 动画启动效果(动画效果显示及隐藏窗口)
- Windows界面编程第六篇 动画启动效果(动画效果显示及隐藏窗口)
- Windows界面编程第六篇 动画启动效果(动画效果显示及隐藏窗口)
- 隐藏/显示界面动画效果
- Silverlight 显示隐藏动画效果
- 窗口的动画显示效果
- JQuery 动画显示和隐藏效果
- 控件隐藏/显示时的动画效果
- JQuery 动画显示和隐藏效果
- [Android] View控件显示隐藏动画效果
- qt实现的窗口吸附屏幕边缘,动画隐藏显示的效果,类似于qq主窗口 吸附 隐藏的效果
- Jquery—效果(隐藏、显示、切换,滑动,淡入淡出及动画)
- 界面切换动画效果
- 窗口动画效果
- jQuery之动画效果(动画基础隐藏和显示,上卷下拉效果 ,淡入淡出效果 ,动画切换的比较,自定义动画,jQuery核心)
- 优化Java动画编程中的显示效果
- Matlab 深度优先搜索求解迷宫问题
- Windows界面编程第四篇 异形窗体 高富帅版
- JVM内存模型及垃圾收集策略解析
- POJ 3280 Cheapest Palindrome【DP之经典回文问题】
- Windows界面编程第五篇 静态控件背景透明化
- Windows界面编程第六篇 动画启动效果(动画效果显示及隐藏窗口)
- Android rest接口
- 微型探测器,研究蛋白结构
- 数组,指针,字符串一些基本了解
- 第三周上机任务项目1-修旱冰场
- Windows界面编程第七篇 文件拖拽(文件拖放)
- 与邮件传输有关的几个协议
- jQuery----各版本
- 智能手机的发展有多猛?