我的程序用了Cllistview控件,我想在菜单里面的某项被选择之后做跟发生了NM_DBLCLK事件同样的工作,,我把两个消息映射到同一个函数,出错,说类型不一样,不能转换; 我在菜单函数中调用NM_DBLCLK的响应函数,,不行,参数不对用“SendMessage(NM_DBLCLK)”,没反应请教各位高手,要怎样才能成功调用那个函数?另外,如何能够判断当前是否有选项被选中,或者当前选中的item的index(鼠标不一定停留在那个item上面)???

解决方案 »

  1.   

    如果发送消息,应该发送WM_NOTIFY 消息
      

  2.   

    简单一点吧,加入WM_NOTIFY消息映射
      

  3.   


    双击时候的响应函数是void CTest01View::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult);
    菜单项响应函数是void CTest01View::OnPopEdit();直接调用的时候会出现那两个参数未知的错误;sendmessage的时候后面两个参数是什么?如果都填上0,会出现错误,在wincore.cpp函数里面执行
              if (message == WM_NOTIFY)
    {
    NMHDR* pNMHDR = (NMHDR*)lParam;
    if (pNMHDR->hwndFrom != NULL && OnNotify(wParam, lParam, &lResult))
    goto LReturnTrue;
    return FALSE;
    }
    的时候要用到pNMHDR->hwndFrom 的时候会出错,因为这个时候pNMHDR = (NMHDR*)lParam ,值是NULL。我的菜单响应函数跟OnNMDblclk是在同一个类里面的。
      

  4.   

    你可以写一个独立的处理函数,然后 OnNMDblclk 和 OnPopEdit 都调用那个函数取得选中的 ItemPOSITION pos = pListCtrl->GetFirstSelectedItemPosition();
    if (pos) // item selected
    {
        int nIndex = GetNextSelectedItem(pos);
        ...
    }