C++/MFC:在窗体Form(Dialog)中多个编辑框时,在输入时将回车解释为TAB键,将输入焦点移到下一个编辑框的方法

很多时候,为了输入方便,常用的做法,就是将回车键解释为将输入焦点移动到下一个编辑框中。就像是我的VxTerm中的快速连接输入一样:

VxTerm是一个国产化替代的SSH工具,可以从本站的资源中免费下载并且免费使用,同时可以从中学习和分享本人的一些代码和经验:https://download.csdn.net/download/mynjer/87769610

只要输入焦点不在下面两个按钮,按回车就当做TAB键:

1、首先,先通过格式下的菜单,打开TAB顺序调整:

在界面中按顺序点各个输入框,就能从其中显示的序号上进行调整。

2、在Dialog的循环消息中,添加PreTranslateMessage,加入如下代码:

cpp 复制代码
BOOL xQuickConnect::PreTranslateMessage(MSG* pMsg)
{
	switch (pMsg->message)
	{
	case WM_KEYDOWN:
		if (GetFocus() == GetDlgItem(xBTNOK.GetDlgCtrlID())|| GetFocus() == GetDlgItem(xBTNOK.GetDlgCtrlID())) //判断当前焦点是否在窗体的按钮上
		{ //如果在按钮上,则按系统执行所有的功能的功能
			return CDialog::PreTranslateMessage(pMsg);
		}
		else
		{ //否则,判断按下的是否是回车
			if (pMsg->wParam == VK_RETURN)
			{ //如果是回车,就忽略,并将TAB键放入当前的输入缓冲区

				INPUT inputs[1] = {};
				ZeroMemory(inputs, sizeof(inputs));
				inputs[0].type = INPUT_KEYBOARD;
				inputs[0].ki.wVk = VK_TAB;
				UINT uSent = SendInput(ARRAYSIZE(inputs), inputs, sizeof(INPUT));
				return 1;
			}
		}
	default:
		break;
	}
	return CDialog::PreTranslateMessage(pMsg);
}

成功后,就相当于是把回车键当成TAB键来用了。

这在一些专门的数据录入界面中,会非常有用。

相关推荐
Mortalbreeze10 分钟前
深入 Linux Socket 编程:端口号、网络字节序与 struct sockaddr 详解
linux·服务器·网络·c++
2zcode1 小时前
项目文档:基于MATLAB神经网络的心力衰竭预测与临床辅助决策系统研究
开发语言·神经网络·matlab·心力衰竭预测\
减瓦1 小时前
深入 Quarkus:云原生时代 Java 的重生之路
java·开发语言·云原生
杨运交1 小时前
[053][核心模块]Java枚举缓存与ORM集成实践
java·开发语言·缓存
繁星蓝雨2 小时前
C++设计原理——异常处理
java·c++·异常处理·noexcept·throw·try catch
Kurisu_红莉栖2 小时前
关于相关问题的自我回答
c++
hansang_IR2 小时前
【题解】[AGC020E] Encoding Subsets
c++·算法·dp
2401_894915532 小时前
Geo优化系统源码部署搭建技术——PHP程序开发部署指南
开发语言·php
wuyk5552 小时前
67.嵌入式C语言进阶:结构体指针实战指南——STM32外设、传感器数据访问的高效技巧
c语言·开发语言·stm32·单片机
找磁材2 小时前
空心杯电机与永磁体
开发语言·磁性材料·钕铁硼·磁钢