gpt4 book ai didi

c++ - 如何将 CDialog::SetDefId 与非按钮控件一起使用?

转载 作者:行者123 更新时间:2023-11-30 05:43:32 26 4
gpt4 key购买 nike


我遇到过 CDialog::SetDefId,虽然它非常简单明了,它用于“按钮”,但我想将此功能与非按钮控件一起使用。我知道你必须按 Enter Return 使对话框使用该 ID

如果我在 CDialog::OnInitDialog 中将 nID 设置为 0 并且没有设置默认按钮,对话框将默认为 CDialog::OnOk,如果我设置了默认按钮,对话框将按预期按下该按钮。

问题是我想让它对非按钮控件起作用,所以如果我将 nID 设置为不是按钮的控件,即使我为keydown 事件或 NM_RETURN,控件是否有焦点并不重要,如果我按 EnterReturn 对话框仍然不会执行任何操作。

< p>如何在不使用 PreTranslateMessage 之类的情况下使控件成为默认控件?哪个消息被发送到控件?

提前致谢

最佳答案

是的,它只适用于按钮,但您可以使用 SetFocus 将焦点更改为任何其他控件:

BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
GetDlgItem(IDC_CHECK1)->SetFocus();
return 0; // return TRUE unless you set the focus to a control
}

在此示例中,确定按钮可能仍是默认按钮。 Enter 键将转到默认按钮,可能是 IDOK。但是空格键会改变复选框IDC_CHECK1

必须有一个默认按钮。如果你不想要一个,然后添加一个假按钮,比如说 IDC_BUTTON1,并使其成为默认按钮并且不可见,那么你就看不到默认按钮(你仍然可以添加 IDC_BUTTON1 到消息映射并决定用 Enter 键做什么)

关于c++ - 如何将 CDialog::SetDefId 与非按钮控件一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30165576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com