vs2008 NONCLIENTMETRICS 错误

来源:互联网 发布:用文言文说网络流行句 编辑:程序博客网 时间:2024/06/06 11:37

vs2008 NONCLIENTMETRICS 错误  


在调一个CGridCtrl类的时候,在vc6.0下可以正常编译,在vs2008以上编译器下却出现bug。
查找之后改了bug,做个记号
转载如下:
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) ;

0 0