gpt4 book ai didi

c++ - 如何处理 ListCtrl 标题中的右键单击事件?

转载 作者:行者123 更新时间:2023-11-28 07:05:34 24 4
gpt4 key购买 nike

我正在寻找一种方法来确定右键单击列表 ctrl 的标题以显示上下文菜单。我有一个代码示例,但它不起作用。

void ExDialog::OnContextMenu(CWnd* pWnd, CPoint point)
{
CListCtrl* pLC = (CListCtrl*) GetDlgItem(IDC_EXAMPLE);
CHeaderCtrl* pHC = pLC->GetHeaderCtrl();
if (pWnd->GetSafeHwnd()==pHC->GetSafeHwnd())
{
CMenu menu;
VERIFY(menu.LoadMenu(IDR_HEADERMENU));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CWnd* pWndPopupOwner = pHC;
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWndPopupOwner);
}
}

最佳答案

你在那里得到 ListView 控件作为参数,然后你需要自己从那里找到标题:点击测试和/或比较坐标:

CListCtrl* pLC = (CListCtrl*) GetDlgItem(IDC_LIST1);
CHeaderCtrl* pHC = pLC->GetHeaderCtrl();
if (pWnd->GetSafeHwnd() == pLC->GetSafeHwnd()) // <<--- Not pHC!
{
UINT nFlags = 0;
pLC->HitTest(point, &nFlags);
if(nFlags & LVHT_NOWHERE) // <<--- Header hits "nowhere"
{
CRect Position;
pHC->GetWindowRect(Position);
if(Position.PtInRect(point)) // <<--- point check
{
CMenu menu;
VERIFY(menu.LoadMenu(IDR_HEADERMENU));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CWnd* pWndPopupOwner = pHC;
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWndPopupOwner);
}
}
}

关于c++ - 如何处理 ListCtrl 标题中的右键单击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21813077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com