mfc对话框中
回车会引起自动退出程序。
于是我在PreTranslateMessage中处理了回车键消息BOOL dlg::PreTranslateMessage(MSG* pMsg) 
{
if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
 return TRUE; 
return CDialog::PreTranslateMessage(pMsg);
}
但是,其实,我界面是需要回车键的,比如树列表中某个item正被编辑状态,
HTREEITEM lo_hItm = ctrl_treeCtrl.InsertItem("新建,请重命名...", TVI_ROOT);
         ctrl_treeCtrl.EditLabel(lo_hItm);
当输入完文字后,回车,,,,
此时应该完成编辑状态。可由于PreTranslateMessage屏蔽了回车所以怎么办呢?

解决方案 »

  1.   

    判断是谁处理消息的HWND hwnd;typedef struct tagMSG {     // msg  
       HWND hwnd;
       UINT message;
       WPARAM wParam;
       LPARAM lParam;
       DWORD time;
       POINT pt;
    } MSG;
      

  2.   

    if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN && pMsg->hwnd == m_hWnd)
    return TRUE;  
    或者就是重写对话框的OnOK函数,去掉函数里的代码
      

  3.   

    BOOL CWinFormExt2011Dlg::PreTranslateMessage(MSG* pMsg) 
    {
    if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)

    if(pMsg->hwnd==this->GetSafeHwnd())
    return TRUE; 
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
    2楼的也不可行
      

  4.   

    BOOL CWinFormExt2011Dlg::PreTranslateMessage(MSG* pMsg) 
    {
    if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)

    if(pMsg->hwnd==this->GetSafeHwnd())
    return TRUE; 
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
    1楼的也不可行
      

  5.   

    if(pMsg->hwnd==this->GetSafeHwnd())
    这个当然不行啊,this是CWinFormExt2011Dlg类的指针,获得的是对话框的句柄判断是否为树的句柄
      

  6.   

    那如何用代码结束
    EditLabel状态呢?
      

  7.   

    在OnIniDialog函数里改下后面的return回车就不会关闭了吧?不用在消息里屏蔽
      

  8.   

    这里的m_hWnd应该是你不希望被屏蔽的控件句柄