请教:对话框程序按下回车就会关闭的问题?

testpwd 2010-08-25 11:12:25
在VC6里面新建一个对话框程序,界面上会有OK、Cancel和一个文本,把这三个控件都删除,只剩一个空的界面,然后

运行它,按下回车键,对话框就关闭了,为什么没有OK、Cancel按钮,对话框还是会响应回车然后关闭呢?
...全文
379 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
ctest_ 2010-08-26
  • 打赏
  • 举报
回复
把IDOK按钮消息响应函数重载,并且把里面的ONOK屏蔽
begges 2010-08-25
  • 打赏
  • 举报
回复
因为复杂的对话框的子控件获得了焦点,然后捕获了vk_return消息。

空dialog会在mfc框架的pretranslatemessage(不是你自己重载的)中调用isdialogmessage,该函数会调用到你的dialog的OnOK(),如果你没重载OnOK(),会调用CDialog::OnOK(); CDialog::OnOK()会调用EndDialog(IDOK).
coolcoffee4051982 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 testpwd 的回复:]
多谢各位老大的指点。现在有个疑问:我这里有个程序,也是几个对话框程序,不过界面相对复杂,

上面有菜单,工具栏,中间主体是树形控件和表格控件。这个对话框程序既没有在PreTranslateMessage

里面处理回车,也没有OnOk方法,也没有向导添加的OK、Cancel按钮,但是按回车却没有关闭对话框。

这是怎么回事呢?
[/Quote]
要看程序才知道。
testpwd 2010-08-25
  • 打赏
  • 举报
回复
写错了,“也是几个对话框程序”应该是“也是一个对话框程序”
testpwd 2010-08-25
  • 打赏
  • 举报
回复
多谢各位老大的指点。现在有个疑问:我这里有个程序,也是几个对话框程序,不过界面相对复杂,

上面有菜单,工具栏,中间主体是树形控件和表格控件。这个对话框程序既没有在PreTranslateMessage

里面处理回车,也没有OnOk方法,也没有向导添加的OK、Cancel按钮,但是按回车却没有关闭对话框。

这是怎么回事呢?
精锐掷矛手 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hurryboylqs 的回复:]
因为对话框默认处理了回车键
你在PreTranslateMessage里阻止一下


C/C++ code

if(pMsg->messsage==WM_KEYDON&&pMsg->wParam==VK_RETURN)
{
return TRUE;
}
[/Quote]
还可以这样,手动添加一个OnOK方法,方法中直接return.
CThinking 2010-08-25
  • 打赏
  • 举报
回复
确是如此,可以参考下面代码,也是我参考别人的,哈哈

BOOL CCodeManageDlg::PreTranslateMessage(MSG* pMsg) 
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_RETURN:
return TRUE;
case VK_ESCAPE:
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
wltg2001 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hurryboylqs 的回复:]
因为对话框默认处理了回车键
你在PreTranslateMessage里阻止一下


C/C++ code

if(pMsg->messsage==WM_KEYDON&&pMsg->wParam==VK_RETURN)
{
return TRUE;
}
[/Quote]
同意,这个是标准做法了
hurryboylqs 2010-08-25
  • 打赏
  • 举报
回复
因为对话框默认处理了回车键
你在PreTranslateMessage里阻止一下


if(pMsg->messsage==WM_KEYDON&&pMsg->wParam==VK_RETURN)
{
return TRUE;
}
wltg2001 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 luciferstar 的回复:]
DefaultButton问题。
新建的基于对话框的应用程序,默认按钮式那个OK。
你改一下即可。
[/Quote]
不是这个原因,你就是删了那个按钮,按回车键也还是会关闭的。
begges 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 luciferstar 的回复:]

DefaultButton问题。
新建的基于对话框的应用程序,默认按钮式那个OK。
你改一下即可。
[/Quote]

怎么改,能让程序不掉用CDialog::OnOK() ,在不重载它的情况下?
LuciferStar 2010-08-25
  • 打赏
  • 举报
回复
DefaultButton问题。
新建的基于对话框的应用程序,默认按钮式那个OK。
你改一下即可。
Eleven 2010-08-25
  • 打赏
  • 举报
回复
重载对话框类的OnOK虚函数,屏蔽CDialog::OnOK();
wltg2001 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 testpwd 的回复:]
多谢各位老大的指点。现在有个疑问:我这里有个程序,也是几个对话框程序,不过界面相对复杂,

上面有菜单,工具栏,中间主体是树形控件和表格控件。这个对话框程序既没有在PreTranslateMessage

里面处理回车,也没有OnOk方法,也没有向导添加的OK、Cancel按钮,但是按回车却没有关闭对话框。

这是怎么回事呢?
[/Quote]
有一个办法也可以达到PreTranslateMessage的效果,刚开始建立对话框时,会有一个“确实”按钮,为这个按钮建立单击响应函数,函数就是OnOk,改写这个函数,直接返回TRUE,然后再将按钮删除就行了。
begges 2010-08-25
  • 打赏
  • 举报
回复
一定被某子控件截获了vk_return,要不然你的dialog重载onok(),就肯定调的到。 否则,它跑哪儿去了?
testpwd 2010-08-25
  • 打赏
  • 举报
回复
我又根据向导新建了一个对话框工程,里面加入一个树形控件,并且是第一个Tab Stop控件,

但运行后回车对话框就关闭了。奇怪。
testpwd 2010-08-25
  • 打赏
  • 举报
回复
这个程序也是根据向导自动生成的框架。
testpwd 2010-08-25
  • 打赏
  • 举报
回复
因为程序实在太长,不方便贴上来。

我用Ctrl+D看了一下Tab顺序,第一个是一个树形控件,不知道是不是树形控件会不会截获vk_return消息?
kemee 2010-08-25
  • 打赏
  • 举报
回复
MFC 对话框程序就这样的,如1楼一样PreTranslateMessage把回车处理掉就行了
mudunke775 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 testpwd 的回复:]
多谢各位老大的指点。现在有个疑问:我这里有个程序,也是几个对话框程序,不过界面相对复杂,

上面有菜单,工具栏,中间主体是树形控件和表格控件。这个对话框程序既没有在PreTranslateMessage

里面处理回车,也没有OnOk方法,也没有向导添加的OK、Cancel按钮,但是按回车却没有关闭对话框。

这是怎么回事呢?
[/Quote]

1楼2楼说的是MFC自动生成的对话框的框架会默认处理了回车键,你的那个程序用的是MFC自动生成的框架吗?
加载更多回复(3)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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