为什么VC遍写的对话框程序,执行的时候,一按回车键就消失了,怎么解决?

batman4242 2002-07-20 01:59:20
为什么VC遍写的基于对话框程序,执行的时候,一按回车键就消失了,怎么解决?就是
按回车键程序不消失??
...全文
1524 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengge008 2002-07-20
  • 打赏
  • 举报
回复
《VC技术内幕》中有解决方法
shaohua 2002-07-20
  • 打赏
  • 举报
回复
处理PreTranslateMessage.
BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message ==WM_KEYDOWN)
{
if(pMsg->hwnd==CButton1.GetSafeHwnd ())
{
....
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}

pony_utc 2002-07-20
  • 打赏
  • 举报
回复
重载OnOK().
y1h2b3xy 2002-07-20
  • 打赏
  • 举报
回复
首先, 你要明白, 按下Enter 键,vc调用了默认的 CDialog::OnOK()函数, 使

之出现了这种情况,解决办法:

用 ClassWizard中的ObjectID中选ID_OK, 然后在Messages中选BK_CLICK,OK。

把原来的OnOk()函数中的CDialog::OnOk()去了, 但要保留原来的OnOk函数。

OK!!!!!!!

sh210 2002-07-20
  • 打赏
  • 举报
回复
按Enter键后,对话框关闭是因为缺省情况下“确定”是缺省按钮。而按Enter键后,系统会发送一个WM_COMMAND消息,此时有焦点的按钮相当于被点击了一下,因此就会出现你所说的情况。

解决的方法:
1、重新指定或不指定一个默认按钮,查看按钮的属性,其中有一个“Default Button”属性,去掉对号即可。但这种情况下,如果按Enter的话,有焦点的按钮对应的代码仍然会被调用。

2、重载OnOk函数
3、你只要按住Ctrl+d,在其他按钮上点一下就行

centuries 2002-07-20
  • 打赏
  • 举报
回复
可以修改默认按钮或是去掉CDialog::OnOK().
jiayp004 2002-07-20
  • 打赏
  • 举报
回复
因为'ok'button的tab是第一,你只要按下Ctrl+d,在其他按钮上点一下就行
jiayp004 2002-07-20
  • 打赏
  • 举报
回复
因为'ok'button的tab是第一,你只要按住Ctrl+d,在其他按钮上点一下就行
realsweat 2002-07-20
  • 打赏
  • 举报
回复
同意楼上的。
mfkzj 2002-07-20
  • 打赏
  • 举报
回复
注销CDialog::Onok()就可以了
//CDialog::OnOk();
kanghc 2002-07-20
  • 打赏
  • 举报
回复
按Enter键后,对话框关闭是因为缺省情况下“确定”是缺省按钮。而按Enter键后,系统会发送一个WM_COMMAND消息,此时有焦点的按钮相当于被点击了一下,因此就会出现你所说的情况。

解决的方法:
1、重新指定或不指定一个默认按钮,查看按钮的属性,其中有一个“Default Button”属性,去掉对号即可。但这种情况下,如果按Enter的话,有焦点的按钮对应的代码仍然会被调用。

2、重载OnOk函数
代码举例如下:
// 在这里处理Enter消息
void CDlgLogIn::OnOK()
{
CWnd* pCtrl = GetFocus(); // 当前输入框
CWnd* pCtrlNext = pCtrl; // 下一个输入框

int ctrlID = pCtrl->GetDlgCtrlID(); // 当前输入框ID
switch (ctrlID)
{
case IDC_EDIT_USERCODE: // 将焦点移至密码输入框
pCtrlNext = GetDlgItem(IDC_EDIT_USERPWD);
// 设置焦点至下一个输入框
pCtrlNext->SetFocus();
break;

default: // 验证密码
OnButtonOK();
break;
}

}
这里处理的是,用户在一个登录对话框中输入用户名后,按Enter,光标转到密码输入框,再按Enter验证密码。

这样做有两个前提:一是对话框中不能有ID_OK按钮(也就是缺省的“确定”按钮对应的ID,要改成别的ID,二是,不能有缺省按钮。

希望能对你有帮助。
YP2002CN 2002-07-20
  • 打赏
  • 举报
回复
说错了..你可以在pretran ..什么函数里面添加你的VK_Return.
YP2002CN 2002-07-20
  • 打赏
  • 举报
回复
你可以把你按钮上的OK按钮换一个ID名字.就可以了
batman4242 2002-07-20
  • 打赏
  • 举报
回复
那怎么做呢?我是说步骤
digdog 2002-07-20
  • 打赏
  • 举报
回复
重新指定一个默认按扭,(VC默认的是确定)
batman4242 2002-07-20
  • 打赏
  • 举报
回复
删除ok键是没用的,重载OK函数怎么做?
yhb4 2002-07-20
  • 打赏
  • 举报
回复
重载OnOK(),在CDialog::ok()前return 就可以了
glassshark 2002-07-20
  • 打赏
  • 举报
回复
删除OK按钮,或者重载OnOK()函数。
Aspist 2002-07-20
  • 打赏
  • 举报
回复
重载OnOK(),让他什么都不做.
mfkzj 2002-07-20
  • 打赏
  • 举报
回复
这里是因为它默认的是OK时间 你对话框的上面应该友个OK的按键 你把里面的
CDialog::ok()注销就可以了

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧