请问如果使用API函数向已知句柄的LISTVIEW的某一个选择项发送鼠标双击事件好急,找这个问题都找了好多天了
望大侠们指点一二,小弟感激不尽

解决方案 »

  1.   

    楼上的你真不负责,POSTMESSAGE或者SENTMESSAGE我也知道可以模拟鼠标事件啊,但是LISTVIEW中,怎样获取选中菜单项的句柄呢??
      

  2.   

    lvSelected = SendMessage(hWndlistView, &H1000& + 66&, 0, ByVal 0&) '获取列表的选定项索引 双击其实很麻烦, 你可以试试,那个listview是否支持回车之类的键盘快捷键,直接发个回车比双击简单多了 ...没有选中项句柄一说 你可以获取listview的控件句柄,用上面的代码获取他的选定行,再获取他的项目矩形位置,再发送双击消息
      

  3.   

    非常感谢PctGL的指导,让我远离了一个误区,但是能够给出实现的代码吗?
      

  4.   

    希望能给个实现的例子,还有这个LISTVIEW是外部程序的,不是自己编写的LISTVIEW
      

  5.   

    因为要跨进程操作列表,代码会很麻烦,所以我推荐尽量避免远程的内存操作,远程内存操作有时会失败,还要更多的代码维护我觉得这个题可以考虑这样做:1 获取远程列表控件选定项
    2 将选定项设置为最顶端的项目
    3 直接发送双击模拟消息, 2次mousedown,mouseup或者 dbclick, 此时选定项位置就比较容易知道了,比如就在5,5的位置
      

  6.   

    PctGL感谢你的帮助,但是能够给点关键性的代码吗?
      

  7.   

    先纠正一个概念,不是向ListView发送事件,因为这些控件的事件都是它们向父窗体发送消息,然后由父窗体统一处理的。
    所以你需要先得到这个ListView的父窗体句柄,然后用SendMassage向其发送WM_NOTIFY消息,wParam是这个ListView的ID(这个ID可以在知道ListView句柄的基础上用GetDlgCtrlID获得),lParam是一个NMHDR结构地址,需要把它的code成员设置为NM_DBLCLK。其余可以参考MSDN。
      

  8.   

    H1000&   +   66&,   0,   ByVal   0&)   
    这些参数是什么啊
    具体怎么实现啊
      

  9.   

    以前也有过这样的需求,可以参考一下:
    void CTestDlg::DBClick()
    {       
            // 设置最后一行高亮显示
            int                nCount = m_List1.GetItemCount();
            if(nCount<0)
                    return;        m_List1.SetFocus();
            m_List1.SetItemState(nCount-1, LVIS_SELECTED,  LVIS_SELECTED);
            m_List1.EnsureVisible(nCount-1,FALSE);        // 模拟CListCtrl双击消息
            NMHDR        g_thdr;
            HWND        g_hWnd;
            GetDlgItem(IDC_LIST1,&g_hWnd);
        g_thdr.code                = NM_DBLCLK;
        g_thdr.hwndFrom        = g_hWnd;
        g_thdr.idFrom        = IDC_LIST1;
        ::SendMessage(m_hWnd, WM_NOTIFY, IDC_LIST1, (LPARAM)&g_thdr);
    }