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

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 128 ::
收藏到网摘: 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