Example for LVM_SUBITEMHITTEST

Example for LVM_SUBITEMHITTEST

本文关键字:SUBITEMHITTEST LVM for Example      更新时间:2023-10-16

有人能给我举一个如何使用LVM_SUBITEMHITTEST的例子吗?

我尝试了以下代码,但无论我在ListView中的哪个位置单击,SendMessage()的返回值和myinfo的相关成员都始终为-1。

case NM_RCLICK:
{
    NMITEMACTIVATE itemClicked = *(NMITEMACTIVATE*)lParam;
    LVHITTESTINFO myinfo;
    memset(&myinfo, 0, sizeof(myinfo));
    POINT cursorPos;
    GetCursorPos(&cursorPos);
    myinfo.pt = cursorPos;
    // I find that itemNumber as well as myinfo->iItem and myinfo->iSubItem
    // are always set to -1 by the following line
    int itemNumber = SendMessage(myListviewHwnd, LVM_SUBITEMHITTEST, 0,(LPARAM)&myinfo);
}

我的代码基于以下MSDN文章:

NM_RCLICK(列表视图)通知代码

LVM_SUBITEMHITEST消息

但他们没有列出任何例子,所以我担心我在做一些愚蠢的事情:(

更新:我在做一些愚蠢的事情。LVM_SUBITEMHITEST函数需要的是客户端坐标,而不是屏幕坐标。下面是一个工作示例:

case NM_RCLICK:
{
    NMITEMACTIVATE itemClicked = *(NMITEMACTIVATE*)lParam;
    LVHITTESTINFO myinfo;
    memset(&myinfo, 0, sizeof(myinfo));
    POINT cursorPos;
    GetCursorPos(&cursorPos);
    ScreenToClient(myListviewHwnd, &cursorPos);
    myinfo.pt = cursorPos;
    int itemNumber = SendMessage(myListviewHwnd, LVM_SUBITEMHITTEST, 0, (LPARAM)&myinfo);
}

在我的案例中,我解决了同样的问题:

LVHITTESTINFO lvHit;
memset(&lvHit,0, sizeof(LVHITTESTINFO));
lvHit.pt = pNMItemActivate->ptAction;
m_list.SubItemHitTest(&lvHit);  // !! Use SubItemHitTest, not HitTest

iItem    = lvHit.iItem;
iSubItem = lvHit.iSubItem;
相关文章:
  • 没有找到相关文章