最近做一个有关数据库的程序,我通过一个ListCtrl来显示记录结果,为了能显示记录的详细资料,我对列表框添加了一个鼠标响应事件,
void CLibraryDlg::OnNMClickList(NMHDR *pNMHDR, LRESULT *pResult)
{
*pResult = 0;
POSITION pos=m_list.GetFirstSelectedItemPosition();//m_list是定义的CListCtrl对象
if(pos==NULL)
return;
int nItem=m_list.GetNextSelectedItem(pos);
………
}
这样返回的nItem 就是记录所在的行数
在移动键盘的上下箭头时,记录条会上下滚动,为了使滚动时记录的详细资料也能随之改变,我又添加了一个对键盘的响应事件
void CLibraryDlg::OnLvnKeydownList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
*pResult = 0;
if(pLVKeyDow->wVKey==VK_UP||pLVKeyDow->wVKey==VK_DOWN)
{
POSITION pos=m_list.GetFirstSelectedItemPosition();
if(pos==NULL)
return;
int nItem=m_list.GetNextSelectedItem(pos);
………
}
结果发现nItem的值是胡乱显示的
哪位大虾知道这是为什么?
敬请赐教!
void CLibraryDlg::OnNMClickList(NMHDR *pNMHDR, LRESULT *pResult)
{
*pResult = 0;
POSITION pos=m_list.GetFirstSelectedItemPosition();//m_list是定义的CListCtrl对象
if(pos==NULL)
return;
int nItem=m_list.GetNextSelectedItem(pos);
………
}
这样返回的nItem 就是记录所在的行数
在移动键盘的上下箭头时,记录条会上下滚动,为了使滚动时记录的详细资料也能随之改变,我又添加了一个对键盘的响应事件
void CLibraryDlg::OnLvnKeydownList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
*pResult = 0;
if(pLVKeyDow->wVKey==VK_UP||pLVKeyDow->wVKey==VK_DOWN)
{
POSITION pos=m_list.GetFirstSelectedItemPosition();
if(pos==NULL)
return;
int nItem=m_list.GetNextSelectedItem(pos);
………
}
结果发现nItem的值是胡乱显示的
哪位大虾知道这是为什么?
敬请赐教!
void ***Dlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
*pResult = 0;
}
void ***Dlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
AfxMessageBox("fef");//1
*pResult = 0;
}发现不管是用鼠标还是键盘,item改变时1都被调了三次,弹了三下对话框。这就是OnItemChanged()的内部实现问题了。
楼主可以加断点查一下,问题应该和我类似