搞了个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;
}
特发此贴记录一下。。。