使用Today API
来源:互联网 发布:网络填表终结者破解版 编辑:程序博客网 时间:2024/05/21 10:43
您需要具备
- eMbedded Visual C++
- 下载Today API代码
正常情况下,“今日”屏幕上包含了有关Pocket PC拥有者、即将发生的约会、任务以及e-mail邮件的信息。Microsoft提供了一个可以向“今日”屏幕添加您自己的用户信息的API。应用程序信息、应用程序的通知、或者其他有用的声明都可以添加到这里,并引起用户的注意。以下这个很短的例子将告诉您如何操作。
创建MyToday.DLL
- 启动eMbedded Visual C++,然后创建一个叫做“MyToday”的新WCE动态链接库工程。
- 在eMbedded Visual C++向导的第二个屏幕中,选择“一个空的DLL”。
现在,我们已经创建了三个基本的文件:
- MyToday.def--包含“今日”屏幕使用的两个输出定义。
- MyToday.cpp--包含用户代码的源文件
- MyToday.rc--含有对话框资源的资源文件
MyToday.def
这个定义文件只有三行:
- EXPORTS
- InitializeCustomItem @ 240 NONAME
- CustomItemOptionsDlgProc @ 241 NONAME
CustomItemOptionDlgProc是可选的,但在这里我还是把它包括在内以说明它的用法。如果您进到“今日”小程序,会弹出一个“选项”对话框,然后选择“设置”,然后“选项”。序号240和241是非常重要的,没有它们,“今日”屏幕将不能加载正确的功能。
MyToday.cpp
MyToday.cpp资源文件包含完成输出功能的代码和我们新建子窗口的窗口过程:
#include
#include
HINSTANCE hInstance;
HWND APIENTRY InitializeCustomItem(TODAYLISTITEM *ptli,
HWND hwndParent);
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
BOOL APIENTRY CustomItemOptionsDlgProc(HWND hDlg, UINT message,
UINT wParam, LONG lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK) {
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
//case WM_CTLCOLORSTATIC:
//break;
default:
return DefWindowProc(hDlg, message, wParam, lParam);
}
return 0;
}
HWND APIENTRY InitializeCustomItem(TODAYLISTITEM *ptli,
HWND hwndParent)
{
WNDCLASSwc;
HWND hWnd = NULL;
if (ptli->fEnabled==0) return NULL;
hInstance = ptli->hinstDLL;
wc.style= CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc= (WNDPROC) WndProc;
wc.cbClsExtra= 0;
wc.cbWndExtra= 0;
wc.hInstance= hInstance;
wc.hIcon= 0;
wc.hCursor= 0;
wc.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
wc.lpszMenuName= 0;
wc.lpszClassName= TEXT("MyToday");
RegisterClass(&wc);
hWnd = CreateWindow(TEXT("MyToday"), TEXT("MyTodayScreen"),
WS_VISIBLE|WS_CHILD,CW_USEDEFAULT,CW_USEDEFAULT,
240, 25, hwndParent, NULL, hInstance, NULL);
return hWnd;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch (message)
{
case WM_TODAYCUSTOM_CLEARCACHE :
break;
case WM_TODAYCUSTOM_QUERYREFRESHCACHE:
break;
case WM_PAINT:
RECT rt;
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rt);
SetBkMode(hdc,TRANSPARENT);
DrawText(hdc, TEXT("Pocket PC Rules!"), 16, &rt,
DT_SINGLELINE | DT_VCENTER | DT_CENTER);
EndPaint(hWnd, &ps);
break;
case WM_LBUTTONUP:
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
仔细研读CreateWindow函数。不管Today API文档中怎么说,我还是创建了一个垂直高度为25个像素的窗口。在这里使用0像素将不会显示出任何东西,正如Today API中所提到的,我永远不能改变“今日”程序的大小。
在WndProc函数中,您可以使用WM_LBUTTONUP通知启动任何程序或者排序其他有趣的素材。关于Today API的更详细内容请阅读eMbedded Visual Tools 文档。文档中有一篇很好的文章,它位于“Pocket PC SDK/为Pocket PC编写程序/升级Pocket PC的应用程序/自定义‘今日’项目”。
MyToday.rc
“选项”对话框需要一个简单的对话框资源:
#include "winuser.h" // extract from windows header
#include "winver.h"
#define IDD_TODAY_CUSTOM 500
#define IDC_STATIC_TITLE 444
#define IDC_STATIC_DESC 445
IDD_TODAY_CUSTOM DIALOG DISCARDABLE 0, 0, 140, 57
STYLE DS_CONTROL | WS_POPUP | WS_VISIBLE
CAPTION "My Today Settings"
EXSTYLE WS_EX_CAPTIONOKBTN
BEGIN
LTEXT "MyToday - Options", IDC_STATIC_TITLE,4, 3, 124, 10
LTEXT "Description of the options for your DLL go here.",
IDC_STATIC_DESC, 5, 18, 124, 16
// Other controls go here.
END
一些注册表设置:
为了激活DLL,我们必须使用远程注册表编辑器添加如下注册表项:[HKEY_LOCAL_MACHINE/Software/Microsoft/Today/Items/"MyToday"]
"Type"=dword:4 ; 4 == Custom
"Enabled"=dword:0; set by the settings/Today?applet
"Options"=dword:1 ; set to 0 if you do not want options
"DLL"="/Windows/MyToday.DLL" ; path to the DLL
最后步骤
为了激活我们新建的“今日”消息,进到Pocket PC的“设置”,然后到“今日”程序,然后选择“我的今日”项。然后在“开始”屏幕中选择“今日”,您将看见如下图所示的自定义文本。
图1:我们自定义的“今日”屏幕须知
调试这样的一个自定义“今日”库是非常困难的。Pocket PC每次启动时都会加载您的DLL文件,但是即使您从“设置/今日”中取消对它的选择或者甚至删除DLL路径,Pocket PC也不会将其释放掉。要想删除DLL,请先禁用DLL,然后在注册表的DLL设置中修改到DLL的路径,然后重启Pocket PC。
- 使用Today API
- 使用Collaboration Today API
- today extension 扩展使用
- Today Screen Plug-in Selection API
- Today
- Today.
- today
- Today
- today
- today!
- Today
- today
- today
- today
- Today
- today
- today
- Today
- Tuscany SCA以独立应用方式运行的简单例子
- 如何读取Flv视频文件的时间
- 自己写的excel导入sqlserver函数
- 在weblogic中使用spring查找hibernate映射文件的陷阱
- ###页面如何能保持在点击位置而不回到页面顶部?
- 使用Today API
- 相见时难别亦难……CSDN Hero 2007 心情流水账结束篇
- C#中使用Excel
- Tomcat,出现乱码问题
- Web服务搜索与执行引擎(六)--基于Lucene的Web服务检索
- asp.net 页面事件:顺序与回传
- C++ SDK+Symbian开发入门之运行
- C++ SDK+Symbian开发入门之部署
- funny3