SystemParametersInfo (SPI_GETNONCLIENTMETRICS ... 返回false的原因分析
2013-03-15 11:44
423 查看
SystemParametersInfo (SPI_GETNONCLIENTMETRICS ... 返回false的原因分析
VC2008下有这么一段代码
看下面NONCLIENTMETRICS的定义
修改如下SystemParametersInfo则返回true:
原因分析:
在SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0);中拷贝内存的大小无论WINVER是什么版本, 都是不包含iPaddedBorderWidth的.
VC2008下有这么一段代码
NONCLIENTMETRICS ncm; ncm.cbSize = sizeof(ncm); VERIFY(SystemParametersInfo (SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0))运行时报错, 原因是SystemParametersInfo返回false引起的.
看下面NONCLIENTMETRICS的定义
typedef struct tagNONCLIENTMETRICS { UINT cbSize; int iBorderWidth; int iScrollWidth; int iScrollHeight; int iCaptionWidth; int iCaptionHeight; LOGFONT lfCaptionFont; int iSmCaptionWidth; int iSmCaptionHeight; LOGFONT lfSmCaptionFont; int iMenuWidth; int iMenuHeight; LOGFONT lfMenuFont; LOGFONT lfStatusFont; LOGFONT lfMessageFont; #if(WINVER >= 0x0600) int iPaddedBorderWidth; #endif /* WINVER >= 0x0600 */ } NONCLIENTMETRICS, *PNONCLIENTMETRICS, FAR* LPNONCLIENTMETRICS;
修改如下SystemParametersInfo则返回true:
NONCLIENTMETRICS ncm; memset(&ncm, 0, sizeof(NONCLIENTMETRICS)); #if(WINVER >= 0x0600) ncm.cbSize = sizeof(NONCLIENTMETRICS) - sizeof(ncm.iPaddedBorderWidth); #else ncm.cbSize = sizeof(NONCLIENTMETRICS); #endif /* WINVER >= 0x0600 */ VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));
原因分析:
在SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0);中拷贝内存的大小无论WINVER是什么版本, 都是不包含iPaddedBorderWidth的.
相关文章推荐
- SystemParametersInfo ( SPI_GETNONCLIENTMETRICS...)在VC 2008 里不能正常工作
- SystemParametersInfo (SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作
- SystemParametersInfo ( SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作
- SystemParametersInfo ( SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作
- SystemParametersInfo ( SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作
- SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 出错。不同系统或者不同版本VS
- SystemParametersInfo GetSystemMetrics
- GetSystemMetrics与SystemParametersInfo
- MFC特定函数的应用20160720(SystemParametersInfo,GetWindowRect,WriteProfileString,GetSystemMetrics)
- GetFileVersionInfo 获取文件版本信息错误原因分析
- file_get_contents()打开URL无法获得数据返回false原因
- SystemParametersInfo ( SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作
- 关于GetSystemMetrics()函数
- LoadLibrary 加载 dll 使用GetLastError返回14001原因
- request.getSession(false)到底返回什么
- conn.excute()插入数据库成功,但却返回false原因
- .NET System.IO.DriveInfo 分析,个人感觉M$有点废
- php函数unserialize数据返回false问题分析
- systemparametersinfo详细
- java中Class.getResource用法和自己老是有事没事报NullPointer错误的原因分析