转载请说明原出处,谢谢~ http://blog.csdn.net/seven_1992/article/details/44514731
上一篇我们谈到了无声无息地“抛锚”(Crash Silently), 并列出了一些在错误处理(Error Handling)中会可能被使用到的函数,那么本篇我们就来介绍几个实用的API函数(Untility Function),让错误不再“无语”(Don't Be Shy)吧。
二、让“错误”会说话
如何让“错误”会说话呢? 这一篇我们要继续讲述的“错误处理与参考”话题是 --- 如何让“错误”会说话(Let It Speek),接下来我们要说到的就是几个“会说话”的函数:
1、让错误对你“咆哮”
Beep()与MessageBeep()是两个与蜂鸣有关的API函数,它们略有不同,Beep()就像一个寻呼机(BP机),简而单调(Simple Guy),MessageBeep()就像一台手机(Cellphone),多彩华丽(Colorful Guy),下面列出在MSDN上关于这两个函数的原型以及解释:
BOOL WINAPI Beep(
_In_ DWORD dwFreq, // 蜂鸣声的频率
_In_ DWORD dwDuration // 蜂鸣声持续的时间
);
该函数的两个输入参数均为DWORD(双字型),其是标准的WINAPI函数(也就是说调用约定为__stdcall),dwFreq参数是发声的频率,单位是赫兹(Hz),取值范围是37Hz~32767Hz(0x25~0x7FFF); dwDuration参数是发声持续的时间,单位是毫秒(Milliseconds); 函数的返回值是BOOL(布尔型),如果执行成功则返回的是非零值,如果失败则返回零值,具体错误信息请使用GetLastError()函数获取。
BOOL WINAPI MessageBeep(
_In_ UINT uType // 消息声的类型
);
该函数的输入参数uType为UINT(无符号整形),表示要发出的消息提示声的类型,的取值是一些系统预定义的值(Default Value),可取类型值具体如下:
0xFFFFFFFF // 一个简单的蜂鸣声(如果声卡无效,则从蜂鸣器发声)
MB_OK // Windows系统的默认提示音
MB_ICONQUESTION // Windows系统的问题提示音
MB_ICONINFORMATION、MB_ICONASTERISK // Windows系统的信息提示音
MB_ICONWARNING、MB_ICONEXCLAMATION // Windows系统的警告提示音
MB_ICONERROR、MB_ICONHAND、MB_ICONSTOP // Windows系统的错误提示音
BOOL WINAPI FlashWindow(
_In_ HWND hWnd, // 要闪烁窗口的句柄
_In_ BOOL bInvert // 窗口闪烁后是否要恢复原来的状态
);
根据MSDN的解释,该函数的作用是使窗口闪烁一次,hWnd参数是要闪烁窗口的句柄(Windows Handle),而bInvert参数则是指窗口闪烁结束后的窗口状态(Windows State),当为真(True)时,窗口闪烁一次后将会变为“高亮状态”(Highlighted State);而当为假(False)时,窗口闪烁一次后将恢复原样(Original State)。
BOOL WINAPI FlashWindowEx(
_In_ PFLASHWINFO pfwi // 存储窗口闪烁信息的结构体指针
);
typedef struct {
UINT cbSize; // 该结构体的大小(cb即表示以字节为单位)
HWND hwnd; // 要闪烁窗口的句柄(该窗口可以是已打开或是处于最小化状态)
DWORD dwFlags; // 标志窗口的闪烁效果(可以是一个或多个的组合)
UINT uCount; // 窗口闪烁的次数
DWORD dwTimeout; // 窗口闪烁的速率(单位为毫秒)
} FLASHWINFO, *PFLASHWINFO;
值 | 含义 |
---|---|
|
同时闪烁窗口标题和任务栏按钮(这相当于设置了 FLASHW_CAPTION | FLASHW_TRAY flags)。 |
|
闪烁窗口标题。 |
|
停止闪烁窗口(系统存储了该窗口的原始状态)。 |
|
不断地闪烁窗口,直到 FLASHW_STOP 标志被设置。 |
|
不断闪烁窗口,直到窗口被激活成为顶层窗口。 |
|
闪烁窗口的任务栏按钮。 |
void WINAPI FatalAppExit(
_In_ UINT uAction, // 该参数必须为零
_In_ LPCTSTR lpMessageText // 以NULL结尾的消息字符串指针
);