MFC实现类似qq的在屏幕右下角动画显示消息窗口
2012-09-25 16:25
417 查看
转载请注明:http://blog.csdn.net/shanzhizi
MFC实现类似qq的在屏幕右下角动画显示消息窗口简单方法介绍,
(1)在stdafx.h文件中加入以下代码,
#include "Winuser.h"
#pragma comment(lib,"user32.lib")
(2)在要显示弹出的函数里面加入以下代码
CPopDlg m_popDlg; //自己创建的对话框类
m_popDlg.Create(IDD_DIALOG1,this);
int x= GetSystemMetrics(SM_CXSCREEN);
int y= GetSystemMetrics(SM_CYSCREEN);
::SetWindowPos(m_popDlg.m_hWnd,NULL,x-349,y-234,349,207,SWP_NOACTIVATE );
::AnimateWindow(m_popDlg.m_hWnd,1000,AW_VER_NEGATIVE|AW_SLIDE);
(3)关于动画效果显示弹窗函数AnimateWindow的说明
BOOL AnimateWindow(HWND hWnd,DWORD dwTime,DWORD dwFlags)
函数功能:该函数能在显示与隐藏窗口时产生两种特殊类型的动画效果:滚动动画和滑动动画。
参数含义
hWnd:指定产生动画窗口的句柄;
dwTime:指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒;
dwFags:指定动画类型。这个参数可以是一个或多个标志的组合。
dwFlags:
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标志时,该标志将被忽略;
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。
如果:
1、窗口使用了窗口边界;
2、窗口已经可见仍要显示窗口;
3、窗口已经隐藏仍要隐藏窗口。
函数将失败。
/******************************************************************
下面是重要的部分
使用方法介绍
1)使用方法一【使用成功】
#include <winuser.h>
#define AW_HOR_POSITIVE 0x00000001
#define AW_HOR_NEGATIVE 0x00000002
#define AW_VER_POSITIVE 0x00000004
#define AW_VER_NEGATIVE 0x00000008
#define AW_CENTER 0x00000010
#define AW_HIDE 0x00010000
#define AW_ACTIVATE 0x00020000
#define AW_SLIDE 0x00040000
#define AW_BLEND 0x00080000
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中添加以下代码即可运行,显示设置的动画效果
//定义AnimateWindow的函数指针
typedef UINT (CALLBACK* LPFUN)(HWND hwnd, DWORD dwTime,DWORD dwFlags);
LPFUN pp;
HINSTANCE hInst=::LoadLibrary("user32.dll");
if(hInst)
{
pp = (LPFUN)::GetProcAddress(hInst, "AnimateWindow" );
pp(GetSafeHwnd(), 100,AW_BLEND|AW_HIDE);
::FreeLibrary(hInst );
}
2)使用方法二【此方法我使用无效】
修改WINUSER.h,首先做个此文件的备份,厚厚~~~
在VC安装目录下进入include子目录,用EDIT命令打开Winuser.h文件,按F3键查找AnimateWindow,可以发现有两处定义,一处是定义该函数中
使用到的参数;另一处是该函数原型的定义。在这两处定义中均出现了对Windows版本的条件判断:#if (WINVER >= 0X500)......
替换为#if (WINVER >= 0X400)......
原来问题出在这里,我们目前所使用的各种Windows主版本号均为5.0以下,所以在VC中编译上述程序时,编译系统自然将AnimateWindow函数排
除在外。因此,为了在我们的程序中使用该函数,就得对其头文件进行一些小小的修改,即将#if (WINVER >= 0X500)改为#if (WINVER >=
0X400),请注意两处出现该函数定义的部分都要进行修改。
3)使用方法三【此方法我使用无效】
不修改WINUSER.H,直接在Stafx.h中加入
#ifndef WINVER
#define WINVER 0X500
#endif
另外一个VC编程简单技巧关于MFC单文档全屏程序的编写方法,
关于其他VC++的文章请参考:http://blog.csdn.net/shanzhizi/article/category/1139261
MFC实现类似qq的在屏幕右下角动画显示消息窗口简单方法介绍,
(1)在stdafx.h文件中加入以下代码,
#include "Winuser.h"
#pragma comment(lib,"user32.lib")
(2)在要显示弹出的函数里面加入以下代码
CPopDlg m_popDlg; //自己创建的对话框类
m_popDlg.Create(IDD_DIALOG1,this);
int x= GetSystemMetrics(SM_CXSCREEN);
int y= GetSystemMetrics(SM_CYSCREEN);
::SetWindowPos(m_popDlg.m_hWnd,NULL,x-349,y-234,349,207,SWP_NOACTIVATE );
::AnimateWindow(m_popDlg.m_hWnd,1000,AW_VER_NEGATIVE|AW_SLIDE);
(3)关于动画效果显示弹窗函数AnimateWindow的说明
BOOL AnimateWindow(HWND hWnd,DWORD dwTime,DWORD dwFlags)
函数功能:该函数能在显示与隐藏窗口时产生两种特殊类型的动画效果:滚动动画和滑动动画。
参数含义
hWnd:指定产生动画窗口的句柄;
dwTime:指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒;
dwFags:指定动画类型。这个参数可以是一个或多个标志的组合。
dwFlags:
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标志时,该标志将被忽略;
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。
如果:
1、窗口使用了窗口边界;
2、窗口已经可见仍要显示窗口;
3、窗口已经隐藏仍要隐藏窗口。
函数将失败。
/******************************************************************
下面是重要的部分
使用方法介绍
1)使用方法一【使用成功】
#include <winuser.h>
#define AW_HOR_POSITIVE 0x00000001
#define AW_HOR_NEGATIVE 0x00000002
#define AW_VER_POSITIVE 0x00000004
#define AW_VER_NEGATIVE 0x00000008
#define AW_CENTER 0x00000010
#define AW_HIDE 0x00010000
#define AW_ACTIVATE 0x00020000
#define AW_SLIDE 0x00040000
#define AW_BLEND 0x00080000
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中添加以下代码即可运行,显示设置的动画效果
//定义AnimateWindow的函数指针
typedef UINT (CALLBACK* LPFUN)(HWND hwnd, DWORD dwTime,DWORD dwFlags);
LPFUN pp;
HINSTANCE hInst=::LoadLibrary("user32.dll");
if(hInst)
{
pp = (LPFUN)::GetProcAddress(hInst, "AnimateWindow" );
pp(GetSafeHwnd(), 100,AW_BLEND|AW_HIDE);
::FreeLibrary(hInst );
}
2)使用方法二【此方法我使用无效】
修改WINUSER.h,首先做个此文件的备份,厚厚~~~
在VC安装目录下进入include子目录,用EDIT命令打开Winuser.h文件,按F3键查找AnimateWindow,可以发现有两处定义,一处是定义该函数中
使用到的参数;另一处是该函数原型的定义。在这两处定义中均出现了对Windows版本的条件判断:#if (WINVER >= 0X500)......
替换为#if (WINVER >= 0X400)......
原来问题出在这里,我们目前所使用的各种Windows主版本号均为5.0以下,所以在VC中编译上述程序时,编译系统自然将AnimateWindow函数排
除在外。因此,为了在我们的程序中使用该函数,就得对其头文件进行一些小小的修改,即将#if (WINVER >= 0X500)改为#if (WINVER >=
0X400),请注意两处出现该函数定义的部分都要进行修改。
3)使用方法三【此方法我使用无效】
不修改WINUSER.H,直接在Stafx.h中加入
#ifndef WINVER
#define WINVER 0X500
#endif
另外一个VC编程简单技巧关于MFC单文档全屏程序的编写方法,
关于其他VC++的文章请参考:http://blog.csdn.net/shanzhizi/article/category/1139261
相关文章推荐
- MFC实现类似qq的在屏幕右下角动画显示消息窗口 .
- qt实现的窗口吸附屏幕边缘,动画隐藏显示的效果,类似于qq主窗口 吸附 隐藏的效果
- 锁屏状态下弹出对话款,类似QQ、微信锁屏时候屏幕小窗口显示消息
- WinForm:实现类似QQ消息框一样的右下角消息提示窗口
- electron实现类似QQ来新消息时的闪烁与任务栏窗口提醒
- winforms实现类似QQ消息框一样的右下角消息提示窗口
- Delphi 类似实现QQ多窗口显示任务栏上
- winforms实现类似QQ消息框一样的右下角消息提示窗口
- 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?
- Delphi 类似实现QQ多窗口显示任务栏上
- 类似QQ消息条数拖拽消失动画效果的实现
- winforms实现类似QQ消息框一样的右下角消息提示窗口
- 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?
- 类似QQ消息提示的任务栏窗口图标的高亮显示方法
- android 实现类似qq未读消息点击循环显示
- 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?
- devexpress显示缓冲滚动条与实现类似QQ消息推送效果
- Delphi 类似实现QQ多窗口显示任务栏上
- MFC实现类似QQ消息弹出框置顶但不抢用户输入焦点
- Delphi 类似实现QQ多窗口显示任务栏上