我做了一个钩子dll,用来捕获鼠标移动,界面上如果几秒没有移动鼠标,则鼠标自动消失,如有移动,又显示。可是不知为什么在鼠标的显示和隐藏总是不能按照我规定的时间及时显示或者隐藏??OnTimer函数如下:
DWORD nsec = (GetTickCount()-ClfUIGetLastInputTime());//ClfUIGetLastInputTime()从dll中返
回,这一步没问题,下面的程序就像没执行,真晕!!
if (nsec>=2)
   ShowCursor(FALSE);
else
   ShowCursor(TRUE);定义的timer是:SetTimer(1, 1000, NULL); 

解决方案 »

  1.   

    在WM_SETCURSOR消息中SetCursor(NULL);
      

  2.   

    CRect rct(0,0,0,0);
    ClipCursor(rct); ClipCursor(NULL);
      

  3.   

    GetTickCount应该是最不精确的一种计时方式了。
    更精确一些的有timeGetTime函数,该函数集有如下函数:
    timeBeginPeriod  
    timeEndPeriod  
    timeGetDevCaps  
    timeGetSystemTime  
    timeGetTime  
    timeKillEvent  
    TimeProc  
    timeSetEvent 
    是一个多媒体定时器函数集。
    对于时间的不准确问题,可以使用timeSetEvent来处理,能精确到1ms。
    再精确的有QueryPerformanceCounter函数,再想精确就得写驱动了。  :DShowCursor 的参数只是增减鼠标显示的计数值,这个计数值是由系统维护的。
    只有当计数值>=0时鼠标才显示,<0则隐藏。