当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 制作 MSN、QQ 的消息提示窗口

VC++
用 auto_ptr 类模板帮助动态内存管理
走近 STL
一步一步学STL标准模板库
使用 <multimap> 库创建重复键关联容器
使用 <map> 库创建关联容器
用 vectors 改进内存的再分配
用函数模板实现和优化抽象操作
STL 字符串类与 UNICODE 及其它......
如何在Dll中导出STL类
再谈“在STL列表(Lists)中插入不同类型的对象”
使用::std::vector<>作为管理动态数组的优先选择
三种常见中文内码的转换方法
JNI 中文处理问题小结
构建 GB2312 汉字库的 unicode 码表
正则表达式简介
在非MFC程序中引用CString
UTF-8与GB2312之间的互换
宽字符标量L"xx"在VC6.0/7.0和GNU g++中的不同实现
用VC++设计语法编辑器
C语言中对时间和日期的处理

VC++ 中的 制作 MSN、QQ 的消息提示窗口


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 141 ::
收藏到网摘: n/a

制作 MSN、QQ 的消息提示窗口

作者:袁怀善

下载源代码

  用过QQ和MSN聊天工具的人都知道,只要好友上线,就会在托盘的位置处显示一个提示窗口,
可以是拉帘式的,或者是淡入淡出的形式出现;想想何不为自己的程式也加一个漂亮的提示窗口呢:)
说做就做。

一、MSN拉帘式窗口制作

分三部分:1、窗口的显示;2、窗口的停留;3、窗口的消失;
如果达到这样郊果,系统中要有三个定时器,进行分别控制。定义的定时器如下:

#define ID_TIMER_POP_WINDOW 1#define ID_TIMER_DISPALY_DELAY 2 #define ID_TIMER_CLOSE_WINDOW 3 

  从CWnd 继承一个窗口,当然也可以从CFrameWnd进行派生,这不是主要问题,关键是看你是怎么处理WM_PAINT,WM_MOUSEMOVE,WM_TIMER的消息。一般情况,我从OnPaint()中进行显示图片,在WM_TIMER中处理定时器消息,下面是处里定时器时用到的代码:

CMsgWnd::CMsgWnd(){	...	SetTimer(ID_TIEMR_POP_WINDOW,20,NULL);	...} void CMsgWnd::OnTimer(UINT nIDEvent) {	static int nHeight=0;	int cy=GetSystemMetrics(SM_CYSCREEN);	int cx=GetSystemMetrics(SM_CXSCREEN);	RECT rect;	SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0);	int y=rect.bottom-rect.top;	int x=rect.right-rect.left;	x=x-WIN_WIDTH;	switch(nIDEvent)	{	case ID_TIMER_POP_WINDOW:	if(nHeight<=WIN_HEIGHT)	{	++nHeight;	MoveWindow(x,	y-nHeight,	WIN_WIDTH,	WIN_HEIGHT);	Invalidate(FALSE);	}	else	{	KillTimer(ID_TIMER_POP_WINDOW);	SetTimer(ID_TIMER_DISPLAY_DELAY,5000,NULL);	}	break;	case ID_TIMER_CLOSE_WINDOW:	if(nHeight>=0)	{	nHeight--;	MoveWindow(x,	y-nHeight,	WIN_WIDTH,	nHeight);	}	else	{	KillTimer(ID_TIMER_CLOSE_WINDOW);	SendMessage(WM_CLOSE);	}	break;	case ID_TIMER_DISPLAY_DELAY:	KillTimer(ID_TIMER_DISPLAY_DELAY);	SetTimer(ID_TIMER_CLOSE_WINDOW,20,NULL);	break;	}	CWnd::OnTimer(nIDEvent);} 
根据你设的定时器的长短来控制窗口的显示过程;

二、QQ淡出淡出显示实现

  其实用到一个API函数:AnimateWindow,下面是这个函数的一些说明:
The AnimateWindow function enables you to produce special effects when showing or hiding windows.There are two types of animation: roll animation and slide animation. 
BOOL AnimateWindow( HWND hwnd, // handle to the window to animate DWORD dwTime, // duration of animation DWORD dwFlags // animation type );
上面的函数前两个参数一看就明白,不用说了,最后一个参数dwFlags设置动画窗口的样式:
Specifies the type of animation. This parameter can be one or more of the following flags.

各种标志说明:

标志 说明
AW_SLIDE Uses slide animation. By default, roll animation is used.
This flag is ignored when used with the AW_CENTER flag.
AW_ACTIVATE Activates the window. Do not use this flag 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 the AW_HIDE flag is used or expand outward
if the AW_HIDE flag is not used.
AW_HOR_POSITIVE Animate the window from left to right. This flag