在VC6.0中编译sysmets.c会出现错误
错误提示:
SYSMETS1.CPP
d:/workspace/text/sysmets.h(297) : error C2065: 'SM_MOUSEWHEELPRESENT' : undeclared identifier
d:/workspace/text/sysmets.h(301) : error C2065: 'SM_XVIRTUALSCREEN' : undeclared identifier
d:/workspace/text/sysmets.h(305) : error C2065: 'SM_YVIRTUALSCREEN' : undeclared identifier
d:/workspace/text/sysmets.h(309) : error C2065: 'SM_CXVIRTUALSCREEN' : undeclared identifier
d:/workspace/text/sysmets.h(313) : error C2065: 'SM_CYVIRTUALSCREEN' : undeclared identifier
d:/workspace/text/sysmets.h(317) : error C2065: 'SM_CMONITORS' : undeclared identifier
d:/workspace/text/sysmets.h(321) : error C2065: 'SM_SAMEDISPLAYFORMAT' : undeclared identifier
解决方法:
因为各个window版本所能使用的常量不一样,所以在xp环境下,必须在sysmets1.cpp文件最开始处加入一句:
#define WINVER 0x0501
以下是windows其他版本号:
windows server 2003
winver>=0x0502
windows xp
winver>=0x0501
windows 2000
winver>=0x0500
windows nt 4.0
winver>=0x0400
windows me
winver>=0x0500
windows 98
winver>=0x0410
windows 95
winver>=0x0400
当按照上面的方法做完后还会有以下的错误:
错误提示:
d:/workspace/sysmets/sysmets.cpp(149) : error C2065: 'SPI_GETWHEELSCROLLLINES' : undeclared identifier
d:/workspace/sysmets/sysmets.cpp(160) : error C2065: 'WHEEL_DELTA' : undeclared identifier
d:/workspace/sysmets/sysmets.cpp(490) : error C2065: 'WM_MOUSEWHEEL' : undeclared identifier
d:/workspace/sysmets/sysmets.cpp(490) : error C2051: case expression not constant
改正:
先去msdn看SystemParametersInfo(SPI_GETWHEELSCROLLLINES,,,)这个函数,SPI_GETWHEELSCROLLLINES这个参数后的注释是这样写的:Windows NT 4.0 and later, Windows 98: Gets the number of lines to scroll when the mouse wheel is rotated. The pvParam parameter must point to a UINT variable that receives the number of lines. The default value is 3.
所以这个鼠标滚轮参数它支持的是Windows NT 4.0 之后的版本,是故我们必须在开头再加上这么一句:
#define _WIN32_WINNT 0x0400
/* >=0x400后的版本都可以,版本信息之前发布过一篇有详细说明*/