Handling right-click on the CListCtrl header control
Posted
by Alberto Gattegno
on April 3rd, 2000
Environment: VC6
An alternative to Zafir Andum's approach on determining right click on the header control is to use the HDM_HITTEST message in order to determine on which header item the user right clicked. This saves you the "for" loop for the determination of the column.
Here is an example:
BOOL CMyListtCtrl::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
if( wParam==0 && ((NMHDR*)lParam)->code ==NM_RCLICK)
{
POINT Point;
GetCursorPos (&Point);
ScreenToClient(&Point);
HDHITTESTINFO HitTest;
HitTest.pt.x = Point.x;
HitTest.pt.y = Point.y;
// Send the Hit Test Message
GetHeaderCtrl()->SendMessage(HDM_HITTEST,0,(LPARAM)&HitTest);
}
}
The HDHITTESTINFO structure holds the column index in its iItem member.
Finally on the part of my colleagues and me, we would like to thank codeguru for the immense help it has given us the last year.

Comments
Wide controls
Posted by czesiek120 on 01/24/2008 01:53amCoordinates need to be recalculated using HeaderCtrl not ListCtrl. Therefore change ScreenToClient(&Point); to GetHeaderCtrl()->ScreenToClient(&Point);
Reply