我想在用戶右鍵單擊CListCtrl中的項目時顯示上下文菜單。我的代碼如下:HitTest按預期工作
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,如果我正確閱讀this,則表示「在整個CListCtrl的右側下方」。當我第一次檢查它是否在CListCtrl中時,這並沒有什麼意義。
那麼我有一個不正確的假設嗎?我的代碼不正確?我錯過了什麼嗎?
作爲一個可能相關,或許不是,獎金問題,既LVHT_ONITEMSTATEICON
和LVHT_ABOVE
是#define
d爲0x08的 - 這是爲什麼?這可能是我誤解的關鍵。
非常感謝!我還會研究WM_RBUTTONDOWN事情 - 你說得對,它導致上下文菜單顯示不正確。 – Smashery 2010-01-15 00:42:35
如果只有我可以投你兩次:-) – Smashery 2010-01-15 00:54:54
Pos的傳遞給OnContextMenu將(-1,-1)我相信,在Shift-F10或專用菜單鍵的情況下。 – 2013-12-17 22:00:09