NONCLIENTMETRICS ncms = {0} ;
ncms.cbSize = sizeof(NONCLIENTMETRICS);
int s = sizeof(NONCLIENTMETRICS);
BOOL b = SystemParametersInfo (SPI_GETNONCLIENTMETRICS, (int)&s, &ncms, 0);
DWORD dw = GetLastError();
上面这段代码在VC 6.0 中工作正常,但是在VC 2008 里 SystemParametersInfo 返回 0,而 GetLastError 返回的却是 0
简单订正如下:
ncms.cbSize = sizeof(NONCLIENTMETRICS) - sizeof(ncms.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
本文介绍了解决SystemParametersInfo在Visual C++ 2008中返回0的问题方法。该问题源于Vista及后续系统中NONCLIENTMETRICS结构的变化。文章提供了修正代码并建议根据目标操作系统版本调整代码。
3080

被折叠的 条评论
为什么被折叠?



