您的位置:首页 > 其它

CListCtrl 单击事件问题

2011-11-30 13:37 169 查看
搞了个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;
}


特发此贴记录一下。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: