首先是代码
HINSTANCE g_Inst;
HWND g_Hwnd;
HWND g_TestWnd;
LRESULT CALLBACK WndProc (HWND hwnd, UINT uimessage, WPARAM wParam, LPARAM lParam) ;
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
g_Inst = (HINSTANCE)hModule;
return TRUE;
}
HWND APIENTRY InitializeCustomItem (TODAYLISTITEM *ptli, HWND hwndParent)
{
WNDCLASS wc;
memset(&wc, 0, sizeof(wc));
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC) WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = g_Inst;
wc.hIcon = 0;
wc.hCursor = 0;
wc.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = TEXT("MyToday");
RegisterClass(&wc);
g_Hwnd = CreateWindow(TEXT("MyToday"), TEXT("MyToday"), WS_VISIBLE | WS_CHILD, CW_USEDEFAULT,
CW_USEDEFAULT, 240, 25, hwndParent, NULL, g_Inst, NULL);
g_TestWnd = CreateWindow(TEXT("Test"), TEXT("TEST"), WS_CHILD, CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, g_Hwnd, NULL, g_Inst, NULL);
ShowWindow(g_Hwnd, SW_SHOWNORMAL);
UpdateWindow(g_Hwnd);
return g_Hwnd;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT uimessage, WPARAM wParam, LPARAM lParam)
{
TODAYLISTITEM* tl = (TODAYLISTITEM*)wParam;
PAINTSTRUCT ps;
switch (uimessage)
{
case WM_TODAYCUSTOM_QUERYREFRESHCACHE:
if (tl->cyp == 0)
{
tl->cyp = 25;
}
break;
case WM_PAINT:
RECT rt;
HDC hdc = BeginPaint(g_Hwnd, &ps);
GetClientRect(g_Hwnd, &rt);
SetBkMode(hdc,TRANSPARENT);
DrawText(hdc, TEXT("Pocket PC Rules!"), 16, &rt,
DT_SINGLELINE | DT_VCENTER | DT_CENTER);
EndPaint(g_Hwnd, &ps);
break;
}
return TRUE;
}
然后定义导出文件
LIBRARY "MyToday"
EXPORTS
InitializeCustomItem @240 NONAME
注册表的编辑
[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
------------------------------------------------------------------------------------------------------------------------------------------------------
在今日插件中,InitializeCustomItem 是默认必须的导出函数,插件的初始化会在此函数中进行
InitializeCustomItem 函数中要做的和普通WIN32SDK做界面是一样的,就是实现一个窗体,从窗体类的实现到最后UpdateWindow
在窗体的过程处理函数中,要注意WM_TODAYCUSTOM_QUERYREFRESHCACHE消息
当加载完今日插件时,系统会每2,3秒时间对每个今日插件进程(其实每个消息的动态库是附加在SHELL32.EXE当中的)发送一个WM_TODAYCUSTOM_QUERYREFRESHCACHE消息。如果是第一次加载,即发送第一条WM_TODAYCUSTOM_QUERYREFRESHCACHE消息的时候,
TODAYLISTITEM* tl = (TODAYLISTITEM*)wParam;
tl->cyp == 0 为TRUE