在某一form模块中需要在无操作时隐藏鼠标指针,而当移动鼠标时又马上恢复显示鼠标指针。于是设计了一个时钟控件来判断和调用ShowCursor(0),在form的mousemove事件中调用ShowCursor(1),在destroy事件中也调用ShowCursor(1)。刚开始运行此form时能正常实现上述需求。但当关闭form后再次运行时,ShowCursor调用却失效了。经仔细分析,发现了原因:
个人估计,大概是因为调用不当导致该函数的内部显示计数器混乱,造成函数失效。因此可以总结为:
ShowCursor必须成对使用、并使其参数互为反值。即:当调用一次ShowCursor(0)时,必须在适当的动作、事件中调用一次ShowCursor(1)相对应。
如果仅调用一次ShowCursor(0)或ShowCursor(1),或者重复调用(0)或重复调用ShowCursor(1),均将导致下次调用失效。
上述form模块中ShowCursor(1)即被调用两次以上,一次在mousemove事件(此处将被多次调用),一次在destroy事件。
为此设置了一个全局变量lShow,初始值为1,每次调用ShowCursor时先判断lShow并取其反值,即:
*隐藏时:
if lShow=1 then
lShow=0
ShowCursor(lShow)
endif
*显示时:
if lShow=0 then
lShow=1
ShowCursor(lShow)
endif
改进后终于正常。遇到此类问题者可参考一下。
附:百度对该函数的解释如下:
ShowCursor函数功能:该函数显示或隐藏光标。
函数原型:int ShowCursor(BOOL bShow);
参数:
bShow:确定内部的显示计数器是增加还是减少,如果bShow为TRUE,则显示计数器增加1,如果bShow为FALSE,则计数器减1。
返回值:返回值规定新的显示计数器。
备注:该函数设置了一个内部显示计数器以确定光标是否显示,仅当显示计数器的值大于或等于0时,光标才显示,如果安装了鼠标,则显示计数的初始值为0。如果没有安装鼠标,显示计数是-1。