现在我得到了桌面sysListView32控件的句柄,我想知道如何判断鼠标经过或hover桌面sysListView32的哪一项(也就是判断鼠标是否在或在哪一个桌面的快捷方式或图标上)。
当鼠标经过桌面上一个快捷方式时,会高亮显示。系统是如何判断的呢?
如果我想获得这个消息,应该如何实现
希望大家能提供一下思路或源码更好,呵呵 

解决方案 »

  1.   

    如果可以的话,Hook到桌面的窗口函数,就可以拦截到任意消息了
      

  2.   

    我已经安装好了钩子函数,就是对于鼠标经过某一项的消息该如何判断还不太清楚。
    对于鼠标点击桌面的消息来判断点击了某一项,我已经有了思路,利用ListView_HitTest函数,和鼠标的位置消息便可以判断。
    但对于鼠标经过某一项或hover是,触发什么消息,现在还不太清楚,现在大概的思路是利用mouse move消息。
      

  3.   

    哎,鼠标经过某一项或hover 我还是贴出我的方法吧。
    在MouseProc函数里
    case WM_MOUSEMOVE:
            TRACKMOUSEEVENT tme;
            tme.cbSize = sizeof(tme);
            tme.hwndTrack = pMouseHook->hwnd;
            tme.dwFlags = TME_LEAVE|TME_HOVER;
            tme.dwHoverTime = 1000;
            g_bTracking = TrackMouseEvent(&tme);还需要安装WH_GETMESSAGE钩子。因为WM_MOUSEHOVER消息是在message的消息队列里,不会被WH_MOUSE钩子拦截。
    在GetMsgProc函数里:
    LPMSG pMsg = (LPMSG)lParam;
       switch(pMsg->message)
       {
         case WM_MOUSEHOVER:
          TCHAR szDebug[100];
          wsprintf(szDebug, TEXT("Hover"));
          OutputDebugString (szDebug); 
          break;
       }
    望大家可以参考一下