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

batman4242 2002-07-20 01:59:20
为什么VC遍写的基于对话框程序,执行的时候,一按回车键就消失了,怎么解决?就是
按回车键程序不消失??
...全文
354 点赞 收藏 20
写回复
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()注销就可以了
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告