《Windows核心编程》の窗口闪烁函数FlashWindow和FlashWindowEx

来源:互联网 发布:弹幕点歌什么软件 编辑:程序博客网 时间:2024/05/16 00:27

为了通知用户某种错误发生了,很多应用程序一般使用MessageBeep函数发出蜂鸣声,或者调用函数FlashWindowFlashWindowEx来使特定的窗口闪烁。应用程序也能使用这些函数来引起用户对某个事件关注,然后显示一个消息提示对话框或一条详细错误信息。

 

1FlashWindow函数用来使某个指定的窗口产生一次闪烁的效果,它同样不会改变窗口的活动状态(如果要使窗口闪烁指定的次数,则需要使用下面介绍的FlashWindowEx函数):

BOOL WINAPI FlashWindow(

  __in  HWND hWnd, //要闪烁的窗口的句柄,该窗口可以是打开的或最小化的

  __in  BOOL bInvert //TRUE,表示窗口从一个状态闪烁到另一个状态;

                            //FALSE,表示窗口恢复到初始状态(可能是激活的也可能是非激活的)

);

 

返回值表示调用FlashWindow函数之前窗口的活动状态,若指定窗口在调用函数之前是激活的,那么返回非零值,否则返回零值。

FlashWindow函数只能闪烁一次,如果要使用该函数闪烁多次时,应用程序需要增加一个系统定时器。

 

 

2FlashWindowEx函数用来使某个特定的窗口产生闪烁的效果,但它并不改变该窗口的活动状态:

BOOL WINAPI FlashWindowEx(

  __in  PFLASHWINFO pfwi //指向FLASHWINFO结构的指针

);

 

返回值表示调用FlashWindowEx函数之前窗口的活动状态,若指定窗口在调用函数之前是激活的,那么返回非零值,否则返回零值。

 

典型情况下,我们使一个窗口闪烁是为了告诉用户这个窗口需要关注这个窗口,但该窗口暂时没有获得键盘焦点。当一个窗口闪烁时,它表现出来的状态就像从激活状态到非激活状态之间往返循环。

 

FLASHWINFO结构包含了特定窗口的闪烁状态,以及系统要闪烁窗口的次数:

typedef struct {

  UINT  cbSize; //该结构的字节大小

  HWND  hwnd; //要闪烁的窗口的句柄,该窗口可以是打开的或最小化的

  DWORD dwFlags; //闪烁的状态,可以是下面取值之一或组合:

                   //FLASHW_ALL---同时闪烁窗口标题和窗口的任务栏按钮,

//            相当于FALSHW_CAPTION | FLASHW_TRAY

//FLASHW_CAPTION---闪烁窗口的标题

//FLASHW_STOP---停止闪烁,系统将重置窗口到其初始状态

//FLASHW_TIMER---不停地闪烁,直到FLASHW_STOP标志被设置

//FLASHW_TIMERNOFG---不停地闪烁,直到窗口前端显示

//FLASHW_TRAY---闪烁窗口的任务栏按钮

  UINT  uCount; //闪烁窗口的次数

  DWORD dwTimeout; //窗口闪烁的频度,毫秒为单位;若该值为0,则为默认图标的闪烁频度

} FLASHWINFO, *PFLASHWINFO;

 

3)附:以下函数都可用于错误处理的: