ユーザーが 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内にあるかどうかを最初に確認するとき、これは本当に意味がありません。
では、どこかに間違った仮定がありますか? 私のコードは間違っていますか?何か不足していますか?
おそらく関連している、または関連していない可能性があるBONUS QUESTIONとして、両方ともLVHT_ONITEMSTATEICON
0x08として表示されます-これはなぜですかLVHT_ABOVE
? #define
これが私の誤解の鍵かもしれません。