【问题标题】:Entering newline in a cedit control在 cedit 控件中输入换行符
【发布时间】:2021-01-09 04:42:55
【问题描述】:

一个非常简单的问题....

如何在CEdit 控制框中输入新行而不触发 OK 并完全关闭对话框?我的意思是当您按下回车键时,它会自动选择 OK,即使您的光标仍在 CEdit 控件中。我正在尝试做的事情可能吗?还是我必须使用其他控件

PS:顺便说一句,这是一个模态对话框。

【问题讨论】:

  • 在对话框编辑器中,将“Multiline”和“Want Return”属性设置为 True,从那里开始一切都是自动的。

标签: visual-c++ mfc cedit


【解决方案1】:

这个问题有多种解决方案。

基本上你需要的是编辑控件上的ES_WANTRETURN 样式。

另一种解决方案是检查PreTranslateMessage 中的消息和密钥(由于已评论这不是推荐的方式,我只是为了可能而提及它):

BOOL CYouDialog::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN &&
        GetFocus() == youcontrol)
    {
        return TRUE;
    }

    return FALSE;
}

另一种解决方案是处理WM_GETDLGCODE。您应该子类化编辑控件并执行以下操作:

UINT CYourEdit::OnGetDlgCode()
{
    return CEdit::OnGetDlgCode() | DLGC_WANTALLKEYS;
}

更新:仅供参考,也请查看Just because you're a control doesn't mean that you're necessarily inside a dialog box

【讨论】:

【解决方案2】:

正如您所发现的,默认的对话框处理是在按下回车键时关闭对话框。 MFC 实际上执行 OnOK 处理,但您可以覆盖它。 Here's 和旧的解释,但是,它仍然是相关的。

【讨论】:

  • 这会阻止你点击 OK 关闭对话框。
猜你喜欢
  • 2010-09-10
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多