首页
社区
课程
招聘
如何判断鼠标经过或hover桌面sysListView32的哪一项
发表于: 2011-6-25 21:26 5707

如何判断鼠标经过或hover桌面sysListView32的哪一项

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

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 256
活跃值: (79)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
大家加了个油,快点给力呀
2011-6-25 22:26
0
雪    币: 677
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
http://msdn.microsoft.com/en-us/library/bb775514(v=vs.85).aspx
2011-6-26 00:30
0
雪    币: 256
活跃值: (79)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
对于如何判断具体哪一项,我已经找到了一种解决方法,但对于如何判断鼠标经过或hover的消息,还没有太好的思路,感觉应该用mouse move消息。现把判断哪一项的代码贴出来给大家分享一下。
        LVITEM lvi;
        LVHITTESTINFO lvh={0};
        int iIndexItem;
        long lx = pMouseHook->pt.x;//pMouseHook是指向MOUSEHOOKSTRUCT结构体的指针
        long ly = pMouseHook->pt.y;
        lvh.pt.x = lx;
        lvh.pt.y = ly;
        ScreenToClient(pMouseHook->hwnd, &(lvh.pt));
        ListView_HitTest(pMouseHook->hwnd, &lvh);
        iIndexItem = lvh.iItem;
        if(iIndexItem !=-1)
        {
                ZeroMemory(&lvi, sizeof(lvi));
                lvi.mask = LVIF_TEXT;
                lvi.iItem = iIndexItem;
                lvi.pszText = szBuff;
                lvi.cchTextMax = _countof(szBuff);

                if(ListView_GetItem(pMouseHook->hwnd, &lvi))
                {
                        wsprintf(szDebug, TEXT("item text = '%s'"), szBuff);
                        OutputDebugString (szDebug);
                }
希望大家能给我提供以下鼠标经过某一个图标时判断的思路
2011-6-26 16:46
0
雪    币: 256
活跃值: (79)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
哎,还是没有人回答。我还是把我的实现思路贴出来吧
在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;
   }
望大家可以参考一下,或者提供以下更好的思路
2011-6-27 10:23
0
雪    币: 256
活跃值: (79)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
算了,结贴吧。。。没人回答了。给分
2011-6-28 14:31
0
游客
登录 | 注册 方可回帖
返回
//