使用Today API

来源:互联网 发布:网络填表终结者破解版 编辑:程序博客网 时间:2024/05/21 10:43
 您可以向“今日”屏幕添加程序和公司的用户信息以及其他重要信息。本文通过一个很简短的示例向您描述了如何使用Today API。
您需要具备 
  • 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。

原创粉丝点击