Example for LVM_SUBITEMHITTEST
Example for LVM_SUBITEMHITTEST
有人能给我举一个如何使用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;
相关文章:
- 没有找到相关文章