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进行处理
但是总觉得不爽为什么这个消息无法响应?
{
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
// TODO: Add your control notification handler code here
MessageBox("test");
*pResult = 0;
}我发现这个消息无法响应,并没有弹出对话框虽然我可以在 LISTVIEW 的Click事件里来对选中ITEM进行处理
但是总觉得不爽为什么这个消息无法响应?
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;
}
你应该明白了吧,把他们放到该放的地方
给你个例子:
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;
}