首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Enter键不触发IDOK默认的Push Button操作

Enter键不触发IDOK默认的Push Button操作
EN

Stack Overflow用户
提问于 2016-02-02 00:52:51
回答 1查看 693关注 0票数 1

我有一个CDialog派生类。它的接口定义有几个图片框和一些按钮,在资源文件中定义为:

代码语言:javascript
运行
复制
IDD_SELECT_ITEMS DIALOGEX 0, 0, 462, 274
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Select"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
    CONTROL         "",IDC_ITEM1,"Static",SS_BLACKFRAME,13,18,59,52
 //...
    CONTROL         "",IDC_ITEM18,"Static",SS_BLACKFRAME,373,178,59,52
    LTEXT           "Select",IDC_STATIC,7,256,40,8
    PUSHBUTTON      "All",IDC_ALL,47,253,50,14
    PUSHBUTTON      "None",IDC_NONE,101,253,50,14
    PUSHBUTTON      "Filter ...",IDC_FILTER,155,253,60,14
    DEFPUSHBUTTON   "OK",IDOK,353,253,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,405,253,50,14
END

当我输入表单时,按Enter键不会触发与IDOK按钮相关联的操作,因为IDC_ALL按钮是有焦点的,而Enter则执行其操作,这是不可取的。

在初始化程序中,

代码语言:javascript
运行
复制
BOOL CSelectDialog::OnInitDialog() 
{
    CDialog::OnInitDialog();
//...
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}

我想尽一切办法把注意力放在“偶像”按钮上,但没有成功。我补充说,我已经厌倦了把评论和取消注释交替起来:

代码语言:javascript
运行
复制
BOOL CSelectParts::OnInitDialog() 
{
    SendDlgItemMessage(IDOK, DM_SETDEFID, 0);

    CDialog::OnInitDialog();
//  ...

    this->SetDefID(IDOK);

    GetDlgItem(IDOK)->SendMessage(BN_SETFOCUS, 0, 0);

    SendDlgItemMessage(IDOK, WM_SETFOCUS, 0, 0);
    SendDlgItemMessage(IDOK, BN_SETFOCUS, 0, 0);
    SendDlgItemMessage(IDC_ALL, WM_KILLFOCUS, 0, 0);

    SendDlgItemMessage(IDOK, DM_SETDEFID, 0,0);
    ::SetFocus(GetDlgItem(IDOK)->GetSafeHwnd());

    GetDlgItem(IDOK)->SetFocus();
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}

我离得越近,就是用这条线

代码语言:javascript
运行
复制
    SendDlgItemMessage(IDOK, WM_SETFOCUS, 0, 0);

这做了一件非常奇怪的事情:它在两个按钮上画了一个焦点矩形,就像你在图像中看到的那样:

但是Enter键还没有触发默认的Push Button!

我甚至尝试添加一个OnOK方法

代码语言:javascript
运行
复制
void CSelectDialog::OnOK()
{
    __super::OnOK();
}

还没有成功!

还有一个实验:我在班里的消息地图上添加了一个条目:

代码语言:javascript
运行
复制
ON_COMMAND(IDOK, OnOK)

还没成功!

如何将Enter键设置为执行IDOK按钮的操作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-02 01:03:01

这个解决方案就在我眼前的一个评论中,我完全失明了,没有看到它!

在看到对话框编程注意事项上"The 对话框编程注意事项 Message“部分的结尾后,我知道我必须返回FALSE。

我删除了我添加的所有无用行,将返回值更改为FALSE,并且一切都像预期的那样正常工作:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35143211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档