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.
lily1102Asked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
alb66Connect With a Mentor Commented:
It should be the following:

void SAMPLE_DLG::OnDblclkSampleList(NMHDR* pNMHDR, LRESULT* pResult)
{
  LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE)pNMHDR;

  lpnmitem->iItem;               <------ row
  lpnmitem->iSubItem;         <------ column
  lpnmitem->ptAction;          <------ point

  ...

  *pResult = 0;
}

For greater details give a look at
http://msdn.microsoft.com/en-us/library/bb774867(VS.85).aspx
http://msdn.microsoft.com/en-us/library/bb774771(VS.85).aspx
0
 
LordOfPortsCommented:
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);
}




0
 
itsmeandnobodyelseCommented:
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.


 

0
 
lily1102Author Commented:
Thanks for all.
I use alb66's comment and it works great.
0
 
lily1102Author Commented:
You are perfect.
0
All Courses

From novice to tech pro — start learning today.