现在有的数据就是鼠标的位置:POINT point;屏幕上有100个40*40的方块,希望在鼠标进出方块区域时,都能给出相应的信息,并留出做其他动作的地方。
谢谢!

解决方案 »

  1.   

    不知道你对时间要求高不高
    如果不高,可以用SetTimer试一试
    如果一般,可以用HOOK技术
    如果很高,可以用QueryPerformanceCounter+多线程
    如果非常高,可以用RING0下的编程(进入RING0的方法在网上很多)
      

  2.   

    * 在窗体上存在40*40的“方块”干什么?是做类似于“扫雷”游戏的程序吗?(即父窗体上存在40*40的子窗体、也可以说是按钮),如果是解决这种情况的问题,建议你就在父窗类上创建40*40个子窗体.它们具有了Windows窗体的全部属性与独立的消息处理,完全可以满足以上你跟踪“鼠标消息”的需要。
    * 什么窗建这么多窗体是一种资源浪费?事情本来就是这么解决的,其实根本构成不了什么浪费,你应该在父窗体的WM_CREATE时机,使用CreateWindowEx(...)创建相应风格的子窗体,之后在子窗体的WM_PAINT事件中使用类似RectVisible(HDC, LPRECT)这样的函数来绘制自定义的多态外观,并在其相应的事件中做响应。
    * 如果最终你还是抛弃了我上述的建议,一味追寻于前窗上用绘线方法绘出的“网络格子”中处理上述“复杂”的事件并做出响应,那么再建议你使用坐标分割的办法,在绘制完成后就记录各个“格子”针对于窗体的相对坐标,然后依据鼠标在不同位置来认定是哪个“格子”,消息处理上只好使用一个标识量,来确认当前鼠标下的“格子”是不是它自己就可以了。
    * 最后建议你还是使用第一个方法较妥当,因为在你处理各个“格子”的鼠标事件中将不那么繁锁。:-)
      

  3.   

    不用那么复杂,利用wm_mousemove消息和ReleaseCapture(),SetCapture()就够用了!!
      

  4.   

    没错,我就是在坐一个类似于扫雷的东西,我希望在扫雷中加入mouseover()功能,当鼠标移到一个方格上时能够在颜色上有所表示,当鼠标移出时又能恢复原样。
      

  5.   

    没错,我就是在坐一个类似于扫雷的东西,我希望在扫雷中加入mouseover()功能,当鼠标移到一个方格上时能够在颜色上有所表示,当鼠标移出时又能恢复原样。
      

  6.   

    原来是扫雷族的呀,那用50ms的SetTimer肯定够了
    SetCapture的方法比较霸道
      

  7.   

    SetTimer怎么用?BluePenguin(蓝色企鹅) 能指点一下吗?
      

  8.   

    BluePenguin(蓝色企鹅) 能指点一下SetTimer怎么用吗?
      

  9.   

    在初始化中
    SetTimer(1,50);
    假设整个扫雷区为CRect r,每个雷的规格为a*b(其中r是以客户区域坐标为基准)
    然后在OnTimer中加入类似如下的代码
    if (nIDEvent == 1)
    {
      POINT point;
      DWORD x=-1,y=-1;//鼠标于坐标为(x,y)的地雷上  ::GetCursorPos(&point);
      ScreenToClient(&point);
      if (r.PtInRect(point))
      {
         x=(point.x-r.left)/a;
         y=(point.y-r.top)/b;
         //下面你就可以用x,y来实现你所需要的功能了
         //....
      }
    }