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"
这个值表示了通过系统设置调整文字大小后的文字大小.默认的这个值是不存在的。
在你的程序中需要查这个注册表值,如果存在的话,你应根据这个值来创建相应的字体。如果不存在的,使用默认的字体就可以了。
#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"
这个值表示了通过系统设置调整文字大小后的文字大小.默认的这个值是不存在的。
在你的程序中需要查这个注册表值,如果存在的话,你应根据这个值来创建相应的字体。如果不存在的,使用默认的字体就可以了。
相关文章推荐
- VirtualBox - 自动调整屏幕大小,设置虚机自适应显示器
- dede中可以用系统设置中的添加新变量来调用频繁改变的文字内容
- 安卓app中嵌入一个H5页面,当手机系统设置字体变大时,如何使H5页面的字体不会随用户自己调整的系统字体变化而变化?
- Win8.1系统设置登录后转到的位置如开始屏幕、桌面
- iOS中通过设置CSS改变WebView字体大小,颜色,背景颜色
- 保持app的字体大小不随系统设置而改变
- Android中设置APP应用字体不缩放,文字不随系统字体大小变化
- Android中设置APP应用字体不缩放,文字不随系统字体大小变化
- Windows Mobile的设备控制行为DEMO:重起,获得系统内存大小,设置系统时间,获得系统唯一识别号DeviceID
- 通过AudioManager 设置调整系统各项音量(铃声 媒体等)
- 嵌入式Qt-4.8.6显示中文并且改变字体大小和应用自己制作的字体库
- 保持app大小不变 不随系统设置改变而改变
- 设置屏幕的方向以及捕获系统设置的改变事件
- Android改变系统自带ProgressDialog的文字大小
- Vista设置修改系统文字大小
- android代码中设置EditText的hint字体大小而不改变EditText的文字大小
- iOS中通过设置CSS改变WebView字体大小,颜色,背景颜色
- textbox控件会根据里面显示的文字行数自动调整自己的大小
- SpannableString设置AndroidTextView改变颜色,文字大小,图文混排等等
- XP系统下设置禁止选择更改显示在屏幕上的窗口和按钮的字体大小