您的位置:首页 > 其它

SystemParametersInfo ( SPI_GETNONCLIENTMETRICS...)在VC 2008 里不能正常工作

2010-07-30 10:23 573 查看
// create fonts
NONCLIENTMETRICS info;
info.cbSize = sizeof(info);
::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(info), &info, 0);

if (!_fontHorzMenu.CreateFontIndirect(&info.lfMenuFont))
return FALSE;

DWORD dw = GetLastError();

上面这段代码在VC 6.0 中工作正常,但是在VC 2008 里 SystemParametersInfo 返回 0,而 GetLastError 返回的却是 0

简单订正如下:
info.cbSize = sizeof(info) - sizeof(info.iPaddedBorderWidth);

  实际是由于从 Vista 和 Windows Server 2008 开始 NONCLIENTMETRICS 在最后增加了iPaddedBorderWidth字段,如果你的程序打算同时支持 vista 或 XP ,Windows 2000, Windows Server 2003,那么应该先调用 GetVersionEx 检测Windows版本,然后决定是否需要减去 sizeof (ncms.iPaddedBorderWidth)

参考: http://msdn.microsoft.com/en-us/library/ms724506(VS.85).aspx

转自:http://blog.csdn.net/royer/archive/2008/12/23/3591046.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: