好奇怪的程序

待续_1006 2017-01-22 02:55:04
下面所描述的是别人写好的程序,其中有一个子功能是一个对话框界面【相关数据输入+确定按钮】
目前这个对话框上的确定按钮直接和回车绑定了,输入输入以后直接回车和点击确定是一个效果 !

我想问的是
1 我搜索了【整个工程】确定按钮的ID号,并没有发现它与快捷键注册函数有任何关系,有几个快捷键注册但是没有这个ID
2 程序也没有去截取 WM_KEYDOWN)消息
3 该按钮也不是程序的默认按钮

我迷茫了,真不知道这位大神是如何实现的,难道还有除了上述三个步骤以外的实现方法??????????
...全文
307 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿源是少年 2017-01-23
  • 打赏
  • 举报
回复
引用 10 楼 worldy 的回复:
并且,IDOK是在MFC的基类处理的 CDialog类里,有个OnOK函数,同时在其消息映射表里有个 ON_COMMAND(IDOK, &CDialog::OnOK) OnOK是通用的,它只是将控件数据读回到类变量,然后关闭窗口
void CDialog::OnOK()
{
	if (!UpdateData(TRUE))
	{
		TRACE(traceAppMsg, 0, "UpdateData failed during dialog termination.\n");
		// the UpdateData routine will set focus to correct item
		return;
	}
	EndDialog(IDOK);
}
赵4老师 2017-01-23
  • 打赏
  • 举报
回复
PreTranslateMessage
worldy 2017-01-23
  • 打赏
  • 举报
回复
并且,IDOK是在MFC的基类处理的 CDialog类里,有个OnOK函数,同时在其消息映射表里有个 ON_COMMAND(IDOK, &CDialog::OnOK) OnOK是通用的,它只是将控件数据读回到类变量,然后关闭窗口
void CDialog::OnOK()
{
	if (!UpdateData(TRUE))
	{
		TRACE(traceAppMsg, 0, "UpdateData failed during dialog termination.\n");
		// the UpdateData routine will set focus to correct item
		return;
	}
	EndDialog(IDOK);
}
worldy 2017-01-23
  • 打赏
  • 举报
回复
按钮处理的是WM_COMMAND消息
CT8100 2017-01-23
  • 打赏
  • 举报
回复
引用 13 楼 iloveyou418 的回复:
难道是tab order排序么。。。
之前做收银系统,因为收银机上没有鼠标,所以要用tab order上编辑好控件的顺序~嘿哈哈~
CT8100 2017-01-23
  • 打赏
  • 举报
回复
难道是tab order排序么。。。
副组长 2017-01-22
  • 打赏
  • 举报
回复
试试拦截回车。
schlafenhamster 2017-01-22
  • 打赏
  • 举报
回复
"输入以后直接回车" 是 edit 中 回车吧 。
待续_1006 2017-01-22
  • 打赏
  • 举报
回复
引用 3 楼 zgl7903 的回复:
[quote=引用 2 楼 shiyanbo_1006 的回复:] [quote=引用 1 楼 zgl7903 的回复:] 对话框的按钮可以设置 BS_DEFPUSHBUTTON (缺省按钮)风格, 按回车时 发送到消息相当于按下这个按钮 如果是App向导生成的 一般IDOK是默认按钮
这个设置方法我在3中已经提到了,该程序不是这么做的,所以很迷茫呢! 该对话框有2个按钮,我把另一个奇效按钮的BS_DEFPUSHBUTTON设置成默认按钮,但是不行,默认回车还是确定按钮[/quote] 资源编辑器中打开 对话框 Ctrl+D 将 IDCANCEL 提到 IDOK之前 IDCANCEL 按钮选为默认按钮, 取消IDOK的默认按钮 [/quote] 关键这几个按钮在资源对话框中没有一个被设置为默认按钮
待续_1006 2017-01-22
  • 打赏
  • 举报
回复
引用 4 楼 VisualEleven 的回复:
资源编辑器中看看该按钮的Default属性是否设置为了TRUE?
没有,这个我可以确定,我现在做的方式是对话框重载他爹的PreTranslateMessage,在视图类之前把这个消息拿到进行处理 BOOL CDlgPicView::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if(VK_RETURN ==pMsg->wParam) { OnBnClickedButtonPass(); return 1; } return CDialogEx::PreTranslateMessage(pMsg); } 但是我好想知道,写这个代码的大神是通过何种方式把回车和某个按钮时间联系到一起的 1 我搜索了【整个工程】确定按钮的ID号,并没有发现它与快捷键注册函数有任何关系,有几个快捷键注册但是没有这个ID 2 程序也没有去截取 WM_KEYDOWN)消息 3 该按钮也不是程序的默认按钮 除了2和3的方法难道还有别的方式?
Eleven 2017-01-22
  • 打赏
  • 举报
回复
资源编辑器中看看该按钮的Default属性是否设置为了TRUE?
zgl7903 2017-01-22
  • 打赏
  • 举报
回复
引用 2 楼 shiyanbo_1006 的回复:
[quote=引用 1 楼 zgl7903 的回复:] 对话框的按钮可以设置 BS_DEFPUSHBUTTON (缺省按钮)风格, 按回车时 发送到消息相当于按下这个按钮 如果是App向导生成的 一般IDOK是默认按钮
这个设置方法我在3中已经提到了,该程序不是这么做的,所以很迷茫呢! 该对话框有2个按钮,我把另一个奇效按钮的BS_DEFPUSHBUTTON设置成默认按钮,但是不行,默认回车还是确定按钮[/quote] 资源编辑器中打开 对话框 Ctrl+D 将 IDCANCEL 提到 IDOK之前 IDCANCEL 按钮选为默认按钮, 取消IDOK的默认按钮
待续_1006 2017-01-22
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
对话框的按钮可以设置 BS_DEFPUSHBUTTON (缺省按钮)风格, 按回车时 发送到消息相当于按下这个按钮 如果是App向导生成的 一般IDOK是默认按钮
这个设置方法我在3中已经提到了,该程序不是这么做的,所以很迷茫呢! 该对话框有2个按钮,我把另一个奇效按钮的BS_DEFPUSHBUTTON设置成默认按钮,但是不行,默认回车还是确定按钮
zgl7903 2017-01-22
  • 打赏
  • 举报
回复
对话框的按钮可以设置 BS_DEFPUSHBUTTON (缺省按钮)风格, 按回车时 发送到消息相当于按下这个按钮 如果是App向导生成的 一般IDOK是默认按钮

16,472

社区成员

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

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

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