我继承一个CListCtrl来支持Drag&Drop. 我让这个CListCtrl做Drag的source,然后改写OnLButtonDown方法代码如下
afx_msg void CDragListCtrlBase::OnLButtonDown(UINT nFlags, CPoint point)
{
CListCtrl::OnLButtonDown(nFlags, point);
CArray<void*> arrayDrag;
POSITION pos = GetFirstSelectedItemPosition();
while(pos){
int nItem = GetNextSelectedItem(pos);
arrayDrag.Add(GetDragItem(nItem));
}
...但是这样我的LButtonDblClk就捕捉不到了。然后在上面的方法我去掉"CListCtrl::OnLButtonDown(nFlags, point);",LButtonDblClk就能用了。
但是没有"CListCtrl::OnLButtonDown(nFlags, point);",好像就没有选中的Item。而且在这个CListCtrl所在的Dialog,我还想抓NM_CLICK,如果去掉了那行代码,这个也抓不到了。高人有什么方法可以搞定这个问题啊,多谢多谢

解决方案 »

  1.   

    Please refer to this link:Drag and Drop between and within a CListCtrl
    http://www.codeproject.com/KB/list/dragtest.aspx
      

  2.   

    你需要响应鼠标双击吗?通常控件响应鼠标双击只是向其父控件发送通知。
    如果需要,你可以自己根据鼠标的点击情况判断双击,并发送NM_DBLCLK通知;也可以去掉那行代码,自己SetItemState,并发送NM_CLINK通知。
      

  3.   

    映射NM_DBCLICK消息来响应CListCtrl的双击消息.注意这两种消息的区别.http://www.eggheadcafe.com/forumarchives/vcmfc/Oct2005/post24543183.asp
      

  4.   

    WM_LBUTTONDOW和WM_LBUTTONDBCLICK消息是发送给控件自己的,而NM_CLICK/NM_DBCLICK是发送给控件的父窗口的.除非这个控件实现了消息反射.
      

  5.   

    你可以设个timer来判断up的时间, 如果在很短时间内,就判断为双击,不然就是单击