`
风吹过PP好冷
  • 浏览: 36720 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SystemParametersInfo中SPI_GETNONCLIENTMETRICS在XP下用法注意

阅读更多

实际应用中,一段代码在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函数实现更改计算机桌面背景图片_源码打包

    使用SystemParametersInfo函数实现更改计算机桌面背景图片

    Delphi禁止使用系统键、禁止添加桌面快捷方式.rar

    Delphi禁止使用系统键、禁止添加桌面快捷方式,禁止也就是屏蔽掉这些功能,当然也可以重新打开,屏蔽功能的实现,主要是以下代码:  SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @tmp, 0); //屏蔽 Alt-Tab  ...

    SystemParametersInfo_with_Delphi2010.rar

    SystemParametersInfo_with_Delphi2010.rar

    Delphi 7 屏幕保护开关程序代码.rar

    Delphi 7开关屏幕保护... SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,0,nil,0);  if not TurnScreenSaverOn then  SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,1,nil,0);  end;  完整源码请下载本源码包。

    VB编程技巧集(中)--站长推荐

    Call SystemParametersInfo(SPI_SCREENSAVERRUNNING,True,pOld,0) 如想将Ctrl+ALt+Del 的功能还原,只需将True换为False 注意:此方案只适用于Windows 9X,NT不适用 按下Ctrl+Alt+Del后,会调出Windows的结束任务...

    MO+VC 开发总结

    2, 控件在窗口显示范围:CTESTVIEW中添加WM_SIZE事件。添加语句 if (m_map.m_hWnd) { m_map.SetWindowPos(0,0,0,cx,cy,SWP_NOZORDER); } 3, 添加SystemParametersInfo()函数,用于解决MO控件随窗口一起变化...

    VC取得任务栏高度的方法

    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换桌面

    用C#和VC实现用API换桌面 使用 API函数 SystemParametersInfo参数用SPI_SETDESKWALLPAPER SPI_SETDESKWALLPAPER:设置桌面壁纸。pvParam参数必须指向一个包含位图文件名,并且以NULL

    《WINDOWS NT/2000下如何屏蔽CTRL+ALT+DEL》配套VC源代码

    在WINDOWS 9X环境中我们可以使用SystemParametersInfo (SPI_SCREENSAVERRUNNING, 1,NULL, 0);来屏蔽CTRL+ALT+DEL,但在NT/2000环境下却行不通,即使使用WH_KEYBOARD_LL这个低级的键盘hook也无法拦截!笔者通过替换GINA...

    Delphi 7.0 彻底更换桌面壁纸及剪贴板监控程序范例.rar

     Systemparametersinfo(SPI_SETDESKWallpaper,0,Nil,SPIF_SendChange);{向Windows发送消息,通知Windows更换壁纸}  Reg.CloseKey;{将更改内容写入注册表并关闭}  Reg.Free;{释放对象}  End;  //处理剪切板内容...

    API取任务栏屏幕用户区高度等

    SystemParametersInfo_

    易语言平铺窗口实例

    易语言平铺窗口实例源码,平铺窗口实例,窗口平铺,GetClassName,API_SetWindowPos,API_寻找子窗口,API_取屏幕句柄,API_取窗口标题,API_SystemParametersInfo,API_判断窗口最小化,API_判断窗口最大化,API_ShowWindow

    易语言API取任务栏屏幕用户区高度等

    易语言API取任务栏屏幕用户区高度等源码,SystemParametersInfo_

    易语言在程序中启动或禁止屏幕保护例程

    易语言在程序中启动或禁止屏幕保护例程源码,在程序中启动或禁止屏幕保护例程,SystemParametersInfo

    易语言任务管理器屏蔽映像名称

    易语言任务管理器屏蔽映像名称源码,任务管理器屏蔽映像名称,FindWindow,FindWindowEx,MessageBox,GetWindowThreadProcessId,OpenProcess,VirtualAllocEx,SendMessage,WriteProcessMemory,LVITEM_WriteProcessMemory,...

    易语言win7自动换壁纸

    易语言win7自动换壁纸源码,win7自动换壁纸,SystemParametersInfo,判断窗口可见性_

    易语言API屏幕应用

    易语言API屏幕应用源码,API屏幕应用,SystemParametersInfo不传址整数型,SystemParametersInfo不传址,SystemParametersInfo,GetSystemMetrics

    易语言鼠标

    易语言鼠标源码,鼠标,SystemParametersInfo不传址,SystemParametersInfo,ShowCursor,GetSystemMetrics,GetDoubleClickTime

    Win7屏保唤醒者

    1) 启动屏幕保护程序后,请不要动鼠标和键盘了, 不然屏幕保护程序就会退出! 2) 能启动屏幕保护的前提是系统设置了屏幕保护! 3) 本程序在32位Win7旗舰版系统下测试通过!

Global site tag (gtag.js) - Google Analytics