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