Click to See Complete Forum and Search --> : MFC List Control: How to use a context menu in a list control?


Gabriel Fleseriu
February 14th, 2003, 08:40 AM
Q: How to use a context menu in a list control?

A:


Create a menu in the resource editor.
<br><br>
Derive your own class from CListBox and insert the WM_CONTEXTMENU handler in the class.
<br><br>
Insert the following code in your 'OnContextMenu()' function:


void CMyListBoxCtl::OnContextMenu(CWnd*, CPoint point)
{
if((point.x == -1) &amp;&amp; (point.y == -1))
{
// Keystroke invocation
CRect rect;

GetClientRect(rect);
ClientToScreen(rect);

point = rect.TopLeft();
point.Offset(5, 5);
}

CMenu menu;
VERIFY(menu.LoadMenu(MY_CREATED_MENU));

CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CWnd* pWndPopupOwner = this;

while(pWndPopupOwner-&gt;GetStyle() &amp; WS_CHILD)
pWndPopupOwner = pWndPopupOwner-&gt;GetParent();

pPopup-&gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x,
point.y,
pWndPopupOwner);
}

<br>
Create a member variable from your List Control and change the class name with your derived class.

<br><br>