代码如下:
BOOL CRNR_v11View::PreTranslateMessage(MSG* pMsg)
{
//AfxMessageBox("截到了delete键");
if (pMsg->wParam == VK_DELETE)
{
HTREEITEM hSel=m_TreeCtrl.GetSelectedItem();//取得选项句柄;
if(hSel==NULL) 
return true;//无任何选项则返回 if(m_TreeCtrl.ItemHasChildren(hSel))//判断是否有子项
if(MessageBox("该索引项下有多条记录,一同删除?","警告",MB_YESNO)==IDNO)
return true; m_TreeCtrl.DeleteItem(hSel); bModifyFlag = true; return TRUE;
}  return CFormView::PreTranslateMessage(pMsg);
}响应delete按键,删除CTree控件上的指定项~现在的问题是:直接运行总是会连着删除两次,可设置断点和单步执行的时候均是正确的,看不出来有执行两次删除的迹象。研究了一上午了,未果。有看到类似的问题,但好像这种都跟代码紧密相关,希望有经验的高手帮我看看,多谢啦~~

解决方案 »

  1.   


    return CFormView::PreTranslateMessage(pMsg); //改成直接返回TRUE试试
      

  2.   

    加一句:
    afxDump << hSel << "\n";
    看到按一次“delete”,进入2次。注意KEYDOWN和KEYUP。
      

  3.   

    改为f ((pMsg->message==WM_KEYUP)&&(pMsg->wParam == VK_DELETE))
      

  4.   

    if((pMsg->wParam == VK_DELETE) && (GetKeyState(VK_DELETE) & 0x8000 ))// keydown
      

  5.   

    if(pMsg->message==WM_KEYDOWN)  //判断按键按下加上判断~~