Я хочу отобразить контекстное меню, когда пользователь щелкает правой кнопкой мыши элемент в CListCtrl. Мой код выглядит следующим образом:
void DatastoreDialog::OnContextMenu(CWnd *pWnd, CPoint pos)
{
// Find the rectangle around the list control
CRect rectMainArea;
m_itemList.GetWindowRect(&rectMainArea);
// Find out if the user right-clicked the list control
if( rectMainArea.PtInRect(pos) )
{
LVHITTESTINFO hitTestInfo;
hitTestInfo.pt = pos;
hitTestInfo.flags = LVHT_ONITEM;
m_itemList.HitTest(&hitTestInfo);
if (hitTestInfo.flags & LVHT_NOWHERE)
{
// No item was clicked
}
else
{
MyContextHandler(hitTestInfo)
}
}
}
Когда я запускаю код, независимо от того, где я нажимаю; для элемента, в пустом пространстве внутри CListCtrl, в любом другом месте диалогового окна (удаляя первый оператор if); hitTestInfo.flags
имеет значение 48, что, если я правильно читаю , это , означает «Ниже и справа от всего CListCtrl». Что на самом деле не имеет смысла, когда я впервые проверяю, находится ли он в CListCtrl.
Так у меня где-то неверное предположение? Мой код неверен? Я что-то пропустил?
Как возможно связанный или, возможно, нет, БОНУСНЫЙ ВОПРОС , оба LVHT_ONITEMSTATEICON
и LVHT_ABOVE
имеют #define
d как 0x08 - почему это? Это может быть ключом к моему недоразумению.