现在的位置: 首页 > 综合 > 正文

CListCtrl 单击事件问题

2013年10月06日 ⁄ 综合 ⁄ 共 1515字 ⁄ 字号 评论关闭

搞了个wince的测试程序,里面用到CListCtrl控件,在响应其单击某一行的事件的时候,老是出问题。开始使用OnLvnItemchanged响应点击事件,发现一个问题。第一次点击某一行,可以正常响应对应的处理;处理完后,回来再点击同样一行就进不了处理了。哥们那个郁闷呀!后来才发现使用OnNMClick事件处理,其中的处理如下就正常了。

void CD3GMessageDlg::OnNMClickListMain(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_List.GetFirstSelectedItemPosition();
	if(pos == NULL)	return;
	int item = m_List.GetNextSelectedItem(pos);
	switch(item)
	{
	case 0:{	// 新建消息
		//MessageBox(L"新建消息");
		CRWMessage *pDlg = new CRWMessage(0, this, -1, -1);
		INT_PTR n = pDlg->DoModal();
		switch(n)
		{
			case IDOK:{
				free(pDlg);
			}break;
		}
		   }break;
	case 1:{	// 收件箱
		//MessageBox(L"收件箱");
		CMessageBox *pDlg = new CMessageBox(0, this, -1);
		INT_PTR n = pDlg->DoModal();
		switch(n)
		{
			case IDOK:{
				free(pDlg);
			}break;
		}
		   }break;
	case 2:{	// 待发件箱
		//MessageBox(L"待发件箱");
		CMessageBox *pDlg = new CMessageBox(0, this, 1);
		INT_PTR n = pDlg->DoModal();
		switch(n)
		{
			case IDOK:{
				free(pDlg);
			}break;
		}
		   }break;
	case 3:{	// 已发件箱
		//MessageBox(L"已发件箱");
		CMessageBox *pDlg = new CMessageBox(0, this, 2);
		INT_PTR n = pDlg->DoModal();
		switch(n)
		{
			case IDOK:{
				free(pDlg);
			}break;
		}
		   }break;
	case 4:{	// 信息设置
		//MessageBox(L"信息设置");
		CSetMessage *pDlg = new CSetMessage(0, this);
		INT_PTR n = pDlg->DoModal();
		switch(n)
		{
			case IDOK:{
				free(pDlg);
			}break;
		}
		   }break;
	case 5:{	// 存储状态
		//MessageBox(L"存储状态");
		CStorageState *pDlg = new CStorageState(0, this);
		INT_PTR n = pDlg->DoModal();
		switch(n)
		{
			case IDOK:{
				free(pDlg);
			}break;
		}
		   }break;
	case 6:{	// 关于
		CString about;
		about = L"App Name\t: D3GMessage\r\n";
		about += L"Version\t: 1.0\r\n";
		about += L"Author\t\t: brantyou\r\n";
		MessageBox(about);
		   }break;
	case 7:{	// 退出
		CDialog::OnOK();
		   }break;
	default:break;
	}

	*pResult = 0;
}

特发此贴记录一下。。。

抱歉!评论已关闭.