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?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

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
alb66Commented:
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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
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
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
System Programming

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.