+ -
当前位置:首页 → 问答吧 → 有些懵了,回车键怎么就捕获不到。

有些懵了,回车键怎么就捕获不到。

时间:2010-12-29

来源:互联网

对话框上有编辑框(RichEdit),其他按钮,在编辑框输入后,本意是回车键就将输入内容发送出去,但是回车键就是捕不到,始终响应的换行。

编辑框用一个CWnd包装,加到对话框上,在对话框中PreTranslateMessage,根本就不进来。

我不太明白这个消息流程是怎么的。

比如说一个对话框,上面添加一个控件,那么按键时,消息是先走对话框,然后再排到具体的控件上去?

好心人,解释下,谢谢。

作者: sc_valentine21   发布时间: 2010-12-29

C/C++ code

BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
    // TODO: Add your specialized code here and/or call the base class
    if(GetDlgItem(IDC_EDIT1)->GetSafeHwnd() == pMsg->hwnd && WM_KEYDOWN == pMsg->message && VK_RETURN == pMsg->wParam)
    {
        AfxMessageBox(_T("Enter Press!"));
    }
    return CDialog::PreTranslateMessage(pMsg);
}

作者: VisualEleven   发布时间: 2010-12-29

如果只是实现用回车发送的话,我提供另一种思路,做一个按钮,设置为默认,回车发送消息。然后将按钮隐藏掉,这样从表面上看回车就是发送消息了

作者: zyrr159487   发布时间: 2010-12-29

你的是正确的,没错。
但是我这里,情况可能特殊些,PreTranslateMessage根本就不进来,这点不是很明白。
PreTranslateMessage是必然执行的?怎么做可以让消息不进来?

作者: sc_valentine21   发布时间: 2010-12-29

C/C++ code

if (pMsg->message == WM_KEYDOWN)            {
        if (GetDlgItem(IDC_EDIT1)==GetFocus())
        {        
            if( pMsg->wParam==VK_RETURN)
            {
                            AfxMessageBox(_T("按键成功"));    

            }
            
        }
    }

作者: tigerMayDo   发布时间: 2010-12-29

引用 2 楼 zyrr159487 的回复:
如果只是实现用回车发送的话,我提供另一种思路,做一个按钮,设置为默认,回车发送消息。然后将按钮隐藏掉,这样从表面上看回车就是发送消息了


你的意思,明白,只是怎么去响应按钮点击?焦点在EDIT的时候,根本都不响应按钮,那岂不是还是没有效果?

作者: sc_valentine21   发布时间: 2010-12-29

热门下载

更多