行者的学习博客

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 // 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)
posted on 2010-07-30 10:23  ylclass  阅读(1319)  评论(0编辑  收藏  举报