WinCE7用户通知 by斜风细雨QQ:253786989 2011-12-26
设置用户通知主要是让系统在某个时间点,弹出一个“通知”给用户一个提醒。还可以由此执行一个我们预先指定好的app。
(1) 设置用户通知
HANDLE CeSetUserNotificationEx( HANDLE hNotification, CE_NOTIFICATION_TRIGGER* pcnt, CE_USER_NOTIFICATION* pceun );
如果是设置新的用户通知,hNotification设置为0。如果是修改一个已经注册过的用户通知,则用该通知的句柄给hNotification参数赋值。第二个参数是CE_NOTIFICATION_TRIGGER类型,主要用来设置通知类型(对于用户通知有两种类型:CNT_TIME和CNT_PERIOD),以及某一个类型通知必需的参数。第三个参数是系统通知用户的方式,比如显示一个通知对话框,或者闪烁LED,设备震动,播放声音文件等等。其中闪烁LED和设备震动并不是每个WinCE设备都支持。
下面用代码示范一下:
// 填充CE_NOTIFICATION_TRIGGER类型结构体cnt CE_NOTIFICATION_TRIGGER cnt; memset(&cnt, 0, sizeof(CE_NOTIFICATION_TRIGGER)); cnt.dwSize = sizeof(CE_NOTIFICATION_TRIGGER); cnt.dwType = CNT_PERIOD; cnt.lpszApplication = TEXT("NotificationApp.exe"); cnt.lpszArguments = TEXT("This is my user notification string.");SYSTEMTIME st = {0}, ste = {0}; GetLocalTime (&st); st.wMinute += 2; if (st.wMinute > 59) { st.wHour++; st.wMinute -= 60; } ste = st; ste.wMinute += 2; if (ste.wMinute > 59) { ste.wHour++; ste.wMinute -= 60; } cnt.stStartTime = st; cnt.stEndTime = ste; // 填充CE_USER_NOTIFICATION类型结构体cun CE_USER_NOTIFICATION cun; memset (&cun, 0, sizeof (CE_USER_NOTIFICATION)); cun.ActionFlags = PUN_DIALOG; cun.pwszDialogTitle = TEXT("对话框方式用户通知"); cun.pwszDialogText = TEXT("时间到!");
// 设置用户通知 HANDLE hNotify = CeSetUserNotificationEx(0, &cnt, &cun); TCHAR szText[128] = {0}; if (hNotify) { wsprintf (szText, TEXT("设置用户通知成功,时间: %d:%02d:%02d"), st.wHour, st.wMinute, st.wSecond); } else { wsprintf (szText, TEXT("设置用户通知失败. rc = %d"), GetLastError()); } MessageBox (szText, TEXT("设置用户通知"), MB_OK | MB_ICONINFORMATION);
上面的代码采用弹出对话框的方式通知用户,弹出的“通知”对话框的标题是“对话框方式用户通知”,文本是“时间到!”。如果2分钟用户还没有理会“通知”对话框,则“通知”对话框自动销毁。如果点击“通知”对话框的Open按钮,则根目录下的“NotificationApp.exe”将会被执行。
(2)配置用户通知
上面代码中,是采用固定的通知方式(弹出对话框方式)。也可以让用户来选择通知方式(弹出对话框,闪烁LED,设备震动,播放声音文件等等)。
BOOL CeGetUserNotificationPreferences( HWND hWndParent, PCE_USER_NOTIFICATION lpNotification );
调用这个函数会弹出一个对话框(Notification Options Dialog),可以让用户选择通知方式,如果是播放声音文件,还可以通过一个组合框选择系统中支持的声音文件。用户选择完成之后,点击“OK”按钮,则该函数返回TRUE,lpNotification参数将由用户所做的修改来填充。
示范代码:
// 填充CE_USER_NOTIFICATION类型结构体cun TCHAR szSound[MAX_PATH] = TEXT ("alarm1.wav"); cun.ActionFlags = PUN_DIALOG; cun.pwszDialogTitle = TEXT("对话框方式用户通知"); cun.pwszDialogText = TEXT("时间到!"); cun.pwszSound = szSound; cun.nMaxSound = sizeof(szSound); CeGetUserNotificationPreferences (m_hWnd, &cun);
在调用CeGetUserNotificationPreferences函数之前,填充cun作为(Notification Options Dialog)默认设置。在该函数返回之后,cun结构体已经包含了用户所作的修改。这时在调用CeSetUserNotificationEx设置通知时,可以将此处的cun作为其第3个参数传递即可。
(3) 清除用户通知
在某个由CeSetUserNotificationEx函数设置的通知发生之前,可以调用CeClearUserNotification函数清除该通知.
BOOL CeClearUserNotification( HANDLE hNotification );
(4) 响应用户通知
在第一段示范代码中,用户通知将执行NotificationApp.exe应用程序,在该程序中我们可以通过调用CeHandleAppNotifications函数来响应用户通知。对于第一段示范代码来说,在NotificationApp.exe中调用CeHandleAppNotifications函数之后,“通知”对话框将销毁,用户通知得到响应。
BOOL CeHandleAppNotifications( TCHAR* pwszAppName );
示范代码:
CeHandleAppNotifications(TEXT("NotificationApp.exe"));
“WinCE7用户通知”功能主要用到的API函数就是上面几个,在工作中有这个需要的时候,还是多做一些实验,多看一下MSDN文档,才能认识的更深刻些。
WinCE7用户通知 by斜风细雨QQ:253786989 2011-12-26