void CTab::OnItemdblclickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
// TODO: Add your control notification handler code here
MessageBox("test");

*pResult = 0;
}我发现这个消息无法响应,并没有弹出对话框虽然我可以在 LISTVIEW 的Click事件里来对选中ITEM进行处理
但是总觉得不爽为什么这个消息无法响应?

解决方案 »

  1.   

    //.h
    afx_msg void OnItemchangedStatus(NMHDR* pNMHDR, LRESULT* pResult);//CPP
    BEGIN_MESSAGE_MAP(CDeviceStat, CDialog)
    //{{AFX_MSG_MAP(CDeviceStat)
    ON_NOTIFY(LVN_ITEMCHANGED, IDC_STATUS, OnItemchangedStatus)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()void CDeviceStat::OnItemchangedStatus(NMHDR* pNMHDR, LRESULT* pResult)
    {
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(LVIS_SELECTED == m_ctrlStat.GetItemState(pNMListView->iItem,LVIS_SELECTED ) &&
    pNMListView->uOldState == 0)
    {
    m_Address = m_ctrlStat.GetItemText(pNMListView->iItem,0);

    // AfxMessageBox(m_Address); }

    *pResult = 0;

    你应该明白了吧,把他们放到该放的地方
      

  2.   

    呵呵....
    给你个例子:
    afx_msg void OnDblclk(NMHDR* pNMHDR, LRESULT* pResult);BEGIN_MESSAGE_MAP(CWinApiView, CListView)
    //{{AFX_MSG_MAP(CWinApiView)
    ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    /***********************************************
    功能:
        响应在视图中双击引起的操作 ,可以修改相应的数
    据项信息,并更新数据库、更新项对应的视图重的
    数据项
    历史纪录:andy-21/10/2002
    *************************************************/
    void CWinApiView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    // TODO: Add your control notification handler code here
       //监测dao数据库对象的有效性,并在纪录集对象打开时关闭该记录集
       if(!m_pDatabase->IsOpen())
       return;
       if(!m_pRecordset)
       return;
       if(m_pRecordset->IsOpen())
       m_pRecordset->Close();
    CString TempFun=_T("");
    CString TempWin16=_T("");
    CString TempRe=_T("");
    CString TempWin9x=_T("");
    CString TempWinnt=_T("");
    m_seleteFun=_T("");
    GetContentinList();
        if(m_seleteFun==_T(""))
    return;
    else
    {   //修改之前的数据
    TempFun=m_seleteFun;
    TempRe=m_re;
    TempWin16=m_win16;
    TempWin9x=m_win9x;
    TempWinnt=m_winnt; CEditDlg dlg;
    dlg.m_strFunName=m_seleteFun;
    dlg.m_strRe=m_re;
    if(m_win16==_T("yes"))
    dlg.m_bWin16=TRUE;
    if(m_win9x==_T("yes"))
    dlg.m_bWin95=TRUE;
    if(m_winnt==_T("yes"))
    dlg.m_bWinnt=TRUE;     if(dlg.DoModal()!=IDOK)
    return;
            //修改过之后数据
    m_seleteFun=dlg.m_strFunName;
    m_re=dlg.m_strRe;
    if(dlg.m_bWin16)
    m_win16=_T("yes");
    else
        m_win16=_T("no"); if(dlg.m_bWin95)
    m_win9x=_T("yes");
    else
        m_win9x=_T("no"); if(dlg.m_bWinnt)
    m_winnt=_T("yes");
    else
        m_winnt=_T("no");
            
    //若未改变的话,直接返回
    if(TempFun==m_seleteFun&&TempRe==m_re&&TempWin16==m_win16&&TempWin9x==m_win9x&&TempWinnt==m_winnt)
    return; CString strSql,str;
    /////////////////////////////////////////////
    //下面的代码是用于验证修改过后的函数名是否已经存在于数据库中
    //若已经存在于数据库中则,提示并不对数据库进行任何操作
    if(m_seleteFun!=TempFun)
    {
            //判断是否已经存在该函数
             strSql.Format("select * from winapi");
            m_pRecordset->Open(dbOpenDynaset,strSql);
            str.Format("WinApi函数名='%s'",m_seleteFun);
            if(m_pRecordset->FindFirst(str))
    {
            str.Format("该函数已经存在于数据库中,不能完成修改操作!");
            AfxMessageBox(str);
             return;
    }
    } ////////////////////////////////////////////////////////
            //若改变的话,更新数据库,并改变在视图中显示出选定的效果
    strSql.Format("update winapi set WinApi函数名='%s',函数说明='%s',WIN16可用='%s',WIN95可用='%s',WINNT可用='%s' where WinApi函数名='%s'",m_seleteFun,m_re,m_win16,m_win9x,m_winnt,TempFun);
            AfxMessageBox(strSql);
    if(m_pDatabase->CanUpdate())
    {
        m_pDatabase->Execute(strSql, dbDenyWrite|dbConsistent);
    str.Format("更新%s函数成功!",TempFun);
    AfxMessageBox(str);
        ((CFrameWnd *) AfxGetMainWnd())->SetMessageText(str);
    }
    else
    {
    str.Format("更新%s函数失败!",TempFun);
    AfxMessageBox(str);
    return;
    }
            
    //////////////////////////////////////////////////////
    //改变视图中相应的函数项
        CListCtrl& ctlList=(CListCtrl&)GetListCtrl();//得到当前的控件
    //ctlList.DeleteItem(m_selectindex);
    ctlList.SetItemText(m_selectindex,0,(LPCTSTR)m_seleteFun);
    ctlList.SetItemText(m_selectindex,1,(LPCTSTR)m_re);
    ctlList.SetItemText(m_selectindex,2,(LPCTSTR)m_win16);
    ctlList.SetItemText(m_selectindex,3,(LPCTSTR)m_win9x);
    ctlList.SetItemText(m_selectindex,4,(LPCTSTR)m_winnt);
    }

    *pResult = 0;
    }
      

  3.   

    我早就用响应NM_DBCLIK解决了这个问题我只是觉得奇怪为什么OnItemdblclick 就无法响应
      

  4.   

    我说的方法可以的,我也遇到过你的问题,我在DIALOG里插CLISTCTRL控件就遇到这样的问题,在CLISTVIEW里就没问题,你可以比较一下,他们是有区别的。我解决的方法就是在DIALOG里手动添加了这个消息,结果就OK了。至于为什么我也就没在管了:)