Link to home
Start Free TrialLog in
Avatar of lily1102
lily1102

asked on

HOW TO GET THE MOUSE POINT BY DOUBLE CLICKING

I have tried to implement the editable CListCtrl by browsing some solutions on the internet.
In one solution, it coded:
void CEditableList::OnLButtonDblClk(UINT nFlags, CPoint point)
{
......
}
The parameter point is needed for the implementation.
However, my object of CListCtrl does not have the double clicking fucntion looks like above.
Mine is:
void SAMPLE_DLG::OnDblclkSampleList(NMHDR* pNMHDR, LRESULT* pResult)
where SampleList is the object name of the CListCtrl.
If I use the double-clicking function of the Dialog that contains the SampleList, it does has the thing that I need, which is void SAMPLE_DLG::OnLButtonDblClk(UINT nFlags, CPoint point) .
However, if I run it, and double click on the SampleList, SAMPLE_DLG::OnLButtonDblClk(...) is not executed. if I double click on any other area not on SampleList, SAMPLE_DLG::OnLButtonDblClk(...) is executed.
My question is that how to get the point while I double click on SampleList. Thanks.
Avatar of LordOfPorts
LordOfPorts
Flag of United States of America image

Is SAMPLE_DLG derived from CListCtrl? By its name it sound as if it is a perhaps derived from dialog and represents the surrounding dialog view perhaps and not a class derived from CListCtrl?

CListCtrl is derived from CWnd which has the OnLButtonDblClk member method http://msdn.microsoft.com/en-us/library/3efhe03w(VS.80).aspx so you would have to add the method to the custom CListCtrl derived class of SampleList if there is one, e.g.:

// .h of CListCtrl derived class, the data type of SampleList
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);

// .cpp of CListCtrl derived class, the data type of SampleList
void SampleListClass::OnLButtonDblClk(UINT nFlags, CPoint point)
{
    // To do code

   CWnd::OnLButtonDblClk(nFlags, point);
}




ASKER CERTIFIED SOLUTION
Avatar of alb66
alb66
Flag of Italy image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
There are a few ways to achieve what you want.

The first you should try is to activate the VC6 wizard - CTRL+W -, choose the list control and add a handler for the NM_DBLCLK message. You should get a function like

void CTestDlg::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
     // todo: ...
     *pResult = 0;
}

Unfortunately the  pNMHDR doesn't tell you where the user has clicked. First you should try to *cast* the NMHDR struct to a NMLISTVIEW struct by

   LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

(I mean I successfully have done that a few years ago).  

If successful the iItem and iSubItem member of the NMLISTVIEW should be valid and tell what you need to know.

If the members were garbage or both 0 you could retrieve the mouse position by GetCursorPos, transfer the windows coordinates to client coordianets and call the CListCtrl::HitTest to determine the cell where the use has clicked. Tell me if you need help for that.


 

Avatar of lily1102
lily1102

ASKER

Thanks for all.
I use alb66's comment and it works great.
You are perfect.