实际应用中,一段代码在Win7下使用正常,在XP下获取字体异常。
ZeroMemory ((PVOID) &m_lf,sizeof (LOGFONT));
NONCLIENTMETRICS nm;
nm.cbSize = sizeof (NONCLIENTMETRICS);
VERIFY (SystemParametersInfo(SPI_GETNONCLIENTMETRICS,nm.cbSize,&nm,0));
m_lf = nm.lfMenuFont;
m_lf.lfWeight = FW_NORMAL;
m_lf.lfHeight = -12;
m_fontMenu.CreateFontIndirect (&m_lf);
pFont = pDC->SelectObject (&m_fontMenu);
问题出在NONCLIENTMETRICS这个结构体上,头文件中的定义如下
typedef struct tagNONCLIENTMETRICSW
{
UINT cbSize;
int iBorderWidth;
int iScrollWidth;
int iScrollHeight;
int iCaptionWidth;
int iCaptionHeight;
LOGFONTW lfCaptionFont;
int iSmCaptionWidth;
int iSmCaptionHeight;
LOGFONTW lfSmCaptionFont;
int iMenuWidth;
int iMenuHeight;
LOGFONTW lfMenuFont;
LOGFONTW lfStatusFont;
LOGFONTW lfMessageFont;
#if(WINVER >= 0x0600)
int iPaddedBorderWidth;
#endif /* WINVER >= 0x0600 */
} NONCLIENTMETRICSW, *PNONCLIENTMETRICSW, FAR* LPNONCLIENTMETRICSW;
在Vista及以上的系统中结构体的成员发生了增加,为了确保在XP,Vista,Win7下均能正常,我们需要在targetver.h中或头文件的其他地方定义
#ifndef WINVER
#define WINVER 0x0500
#endif
分享到:
相关推荐
使用SystemParametersInfo函数实现更改计算机桌面背景图片
Delphi禁止使用系统键、禁止添加桌面快捷方式,禁止也就是屏蔽掉这些功能,当然也可以重新打开,屏蔽功能的实现,主要是以下代码: SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @tmp, 0); //屏蔽 Alt-Tab ...
SystemParametersInfo_with_Delphi2010.rar
Delphi 7开关屏幕保护... SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,0,nil,0); if not TurnScreenSaverOn then SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,1,nil,0); end; 完整源码请下载本源码包。
Call SystemParametersInfo(SPI_SCREENSAVERRUNNING,True,pOld,0) 如想将Ctrl+ALt+Del 的功能还原,只需将True换为False 注意:此方案只适用于Windows 9X,NT不适用 按下Ctrl+Alt+Del后,会调出Windows的结束任务...
2, 控件在窗口显示范围:CTESTVIEW中添加WM_SIZE事件。添加语句 if (m_map.m_hWnd) { m_map.SetWindowPos(0,0,0,cx,cy,SWP_NOZORDER); } 3, 添加SystemParametersInfo()函数,用于解决MO控件随窗口一起变化...
SystemParametersInfo(SPI_GETWORKAREA, 0, &rt, 0); //任务栏在下面的高度 int y = ::GetSystemMetrics(SM_CYSCREEN)-rt.Height(); //上面 y = rt.top; //左 y = rt.left; //右 y = ::GetSystemMetrics(SM_CXSCREEN...
用C#和VC实现用API换桌面 使用 API函数 SystemParametersInfo参数用SPI_SETDESKWALLPAPER SPI_SETDESKWALLPAPER:设置桌面壁纸。pvParam参数必须指向一个包含位图文件名,并且以NULL
在WINDOWS 9X环境中我们可以使用SystemParametersInfo (SPI_SCREENSAVERRUNNING, 1,NULL, 0);来屏蔽CTRL+ALT+DEL,但在NT/2000环境下却行不通,即使使用WH_KEYBOARD_LL这个低级的键盘hook也无法拦截!笔者通过替换GINA...
Systemparametersinfo(SPI_SETDESKWallpaper,0,Nil,SPIF_SendChange);{向Windows发送消息,通知Windows更换壁纸} Reg.CloseKey;{将更改内容写入注册表并关闭} Reg.Free;{释放对象} End; //处理剪切板内容...
SystemParametersInfo_
易语言平铺窗口实例源码,平铺窗口实例,窗口平铺,GetClassName,API_SetWindowPos,API_寻找子窗口,API_取屏幕句柄,API_取窗口标题,API_SystemParametersInfo,API_判断窗口最小化,API_判断窗口最大化,API_ShowWindow
易语言API取任务栏屏幕用户区高度等源码,SystemParametersInfo_
易语言在程序中启动或禁止屏幕保护例程源码,在程序中启动或禁止屏幕保护例程,SystemParametersInfo
易语言任务管理器屏蔽映像名称源码,任务管理器屏蔽映像名称,FindWindow,FindWindowEx,MessageBox,GetWindowThreadProcessId,OpenProcess,VirtualAllocEx,SendMessage,WriteProcessMemory,LVITEM_WriteProcessMemory,...
易语言win7自动换壁纸源码,win7自动换壁纸,SystemParametersInfo,判断窗口可见性_
易语言API屏幕应用源码,API屏幕应用,SystemParametersInfo不传址整数型,SystemParametersInfo不传址,SystemParametersInfo,GetSystemMetrics
易语言鼠标源码,鼠标,SystemParametersInfo不传址,SystemParametersInfo,ShowCursor,GetSystemMetrics,GetDoubleClickTime
1) 启动屏幕保护程序后,请不要动鼠标和键盘了, 不然屏幕保护程序就会退出! 2) 能启动屏幕保护的前提是系统设置了屏幕保护! 3) 本程序在32位Win7旗舰版系统下测试通过!