您的位置:首页 > 其它

windows mobile 6.0系统中自己制作的今日插件,通过“开始-设置-系统-屏幕-文字大小”调整文字大小后,插件上的文字大小不改变!

2009-06-05 09:31 543 查看
如题,最近我用win32自己制作了一个今日插件,放到系统中后可以加载显示,只是通过系统设置调整文字大小后,我的插件中文字大小并没有改变,重启系统也是一样没有任何变化。现将代码贴上,望高手给予指点。

#include "stdafx.h"
#include <windows.h>
#include <todaycmn.h>
#include <Aygshell.h>
#include "resource.h"

//窗口类名称
const TCHAR szWndClassName[] = TEXT("MyPlugIns");

HINSTANCE g_hInst = NULL;
HICON g_hIcon;
BOOL g_bSelected = FALSE;

// The height in pixels of the Today component
// picked at random. It's gotta be something!
#define MODULE_HEIGHT 20

/*************************************************************************/
/* WndProc for the window  */
/*************************************************************************/
LRESULT WINAPI CustomItemWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
PAINTSTRUCT ps;
HDC hdc = NULL;

// This structure is used to store all kinds
// of internal Today component information.
TODAYLISTITEM* ptli2;

switch (msg)
{
case WM_TODAYCUSTOM_CLEARCACHE:
break;

case WM_TODAYCUSTOM_QUERYREFRESHCACHE:
{
ptli2 = (struct _TODAYLISTITEM *)wp;

if(!ptli2)
{
return FALSE;
}

if (0 == ptli2->cyp)
{
// system metrics is 240*320
ptli2->cyp = MODULE_HEIGHT;
return TRUE;
}
else
{
return FALSE;
}
break;
}

case WM_TODAYCUSTOM_RECEIVEDSELECTION:
{
g_bSelected = TRUE;
return TRUE;
}

case WM_TODAYCUSTOM_USERNAVIGATION:
break;

case WM_TODAYCUSTOM_ACTION:
break;

case WM_LBUTTONUP:
{
SHELLEXECUTEINFO sei;
ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));

sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.nShow = SW_SHOWNORMAL;

sei.lpFile = _T("//Windows//MyApp.exe");
sei.lpParameters = NULL;

ShellExecuteEx(&sei);
}
break;

case WM_ERASEBKGND:
{
TODAYDRAWWATERMARKINFO dwi;
dwi.hdc = (HDC)wp;
GetClientRect(hwnd, &dwi.rc);

dwi.hwnd = hwnd;
SendMessage(GetParent(hwnd), TODAYM_DRAWWATERMARK, 0, (LPARAM)&dwi);
return TRUE;
}

// Standard Windows Paint message
case WM_PAINT:
{
RECT rt;
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rt);

SetBkMode(hdc, TRANSPARENT);
DrawIcon(hdc, 2, 2, g_hIcon);

LOGFONT lf;
HFONT hSysFont;
HFONT hFontOld;
HFONT hFont;

// get system font
hSysFont = (HFONT)GetStockObject(SYSTEM_FONT);
// save system font param to LOGFONT
GetObject(hSysFont, sizeof(LOGFONT), &lf);

// now we create customize font
hFont = CreateFontIndirect(&lf);

// select the font we have created to hdc for use
hFontOld = (HFONT)SelectObject(hdc, hFont);

COLORREF crText;

crText = SendMessage(GetParent(hwnd), TODAYM_GETCOLOR, (WPARAM)TODAYCOLOR_TEXT, NULL);
// set that color
SetTextColor(hdc, crText);

LPCTSTR lpText = TEXT("      我的插件");

DrawText(hdc, lpText, -1, &rt, DT_VCENTER | DT_LEFT);

DeleteObject(SelectObject(hdc, hFontOld));
DeleteObject(hFont);

EndPaint(hwnd, &ps);
}
break;
case WM_NOTIFY:
{
NMHDR* pnmhdr = (NMHDR*)lp;
if(pnmhdr->code == NM_CUSTOMDRAW)
SendMessage(hwnd, WM_PAINT, 0, 0);
}
break;
default:
break;
}
return DefWindowProc(hwnd, msg, wp, lp);
}

/*************************************************************************/
/* Initilize the class  */
/*初始化类*/
/*************************************************************************/
void InitilizeClass(HINSTANCE hinst)
{
WNDCLASS wc;
memset(&wc, 0, sizeof(wc));

wc.style = 0;
wc.lpfnWndProc = (WNDPROC)CustomItemWndProc;
wc.hInstance = hinst;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = (struct HBRUSH__ *)GetStockObject(WHITE_BRUSH);
wc.lpszClassName = szWndClassName;

UnregisterClass(szWndClassName, hinst);
RegisterClass(&wc);
}

/*************************************************************************/
/* Initilize anything that is required for the DLL  */
/*************************************************************************/
BOOL WINAPI DllMain(HANDLE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);

switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
{
//保存实例句柄
g_hInst = (struct HINSTANCE__ *)hDLLInst;

//load the icon
g_hIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_DISPLAYICON), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);

InitilizeClass((HINSTANCE)hDLLInst);
}
break;

case DLL_PROCESS_DETACH:
{
DestroyIcon(g_hIcon);

UnregisterClass(szWndClassName, (struct HINSTANCE__ *)hDLLInst);
}
break;
default:
break;
}
return TRUE;
}

/*************************************************************************/
/* DlgProc for the options  */
/*************************************************************************/
LRESULT WINAPI CustomItemOptionsDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg)
{
case WM_COMMAND:
{
TODAYLISTITEM* ptli;

ptli = (TODAYLISTITEM *)GetWindowLong(hDlg, GWL_USERDATA);
ASSERT(NULL != ptli);

if (NULL == ptli)
{
break;
}

if (IDOK == LOWORD(wp))
{
EndDialog(hDlg, 0);
}
}
break;
default:
break;
}
return FALSE;
}

// This code is the entry to the Today component DLL

HWND InitializeCustomItem(TODAYLISTITEM* ptli, HWND hwndParent)
{
HWND hWnd;

if (!ptli->fEnabled)
{
return NULL;
}

hWnd = CreateWindow(szWndClassName, szWndClassName, WS_VISIBLE | WS_CHILD, CW_USEDEFAULT, CW_USEDEFAULT, 240, 0, hwndParent, NULL, g_hInst, NULL);

ShowWindow(hWnd, SW_SHOWNORMAL);

return hWnd;
}

 

在HKEY_LOCAL_MACHINE/ControlPanel/Stylus下有一个键叫96DPI或者说192DPI这样的KEY,在这个KEY下有值"CurFont"
这个值表示了通过系统设置调整文字大小后的文字大小.默认的这个值是不存在的。
在你的程序中需要查这个注册表值,如果存在的话,你应根据这个值来创建相应的字体。如果不存在的,使用默认的字体就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐