为了显示本地文件重载了CCtrlList。现在双击CCtrlList里面的内容,如果双击的是文件那么做一些操作,如果是文件夹,执行父类默认的操作,请问怎么样实现。我的做法是void CShellListCtrl::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMListView = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
if(pNMListView->iItem==-1)
return;
if(Typpeof(GetItemText(pNMListView->iItem,0)==A..)
        {
          ......
        }
        else
        {
           SendMessage(WM_NOTIFY, NM_CLICK, (LPARAM)&nh);
        }
*pResult = 0;
}
SendMessage(WM_NOTIFY, NM_CLICK, (LPARAM)&nh);有问题,请指教!!!多谢!!!

解决方案 »

  1.   

    将父类中click事件中目前执行的语句封装成函数,然后在父类的click中调用,并且用该函数替换你这里的SendMessage调用就可以了。不必要用发送消息的方式。
      

  2.   

    SendMessage(WM_NOTIFY,NM_DBLCLK, (LPARAM)&nh);
      

  3.   

    LV_DISPINFO lvDispInfo;
    lvDispInfo.hdr.hwndFrom = GetParent()->m_hWnd;
    lvDispInfo.hdr.idFrom = GetDlgCtrlID();
    lvDispInfo.hdr.code = LVN_ITEMCHANGED;
    lvDispInfo.item.mask = LVIF_TEXT;
    lvDispInfo.item.iItem = m_iItem;
    lvDispInfo.item.iSubItem = m_iSubItem;
    lvDispInfo.item.pszText = text
    lvDispInfo.item.cchTextMax = text length
    GetParent()->SendMessage( WM_NOTIFY, GetDlgCtrlID(),(LPARAM)&lvDispInfo);
      

  4.   

    84830388(豆豆他爸),
    由于父类是Codejock Software 里的CXTShellListCtrl,刚才试了不行,如果再建一个父类,不知道OnNMDblclk具体执行什么
      

  5.   

    毛毛,SendMessage(WM_NOTIFY,NM_DBLCLK, (LPARAM)&nh);是想让他执行父类的程序。既不做拦截他所执行的结果。
      

  6.   

    是这样的,这个CtrlList显示的是一个目录里的文件。就像windows得浏览器一样,双击CtrlList如果是文件的话,则执行,目录则打开其目录并在Ctrllist里显示。我现在想如果是双击的是文件,则作其他的操作,如果是目录则还是执行以前的操作。表达能力有限,希望能说清楚了,谢谢各位了
      

  7.   

    noneone(noneone):是无限递归
    。问题通过别的方法解决了。感谢各位。