编辑框设置焦点到文本最后,TAB键切换光标。

本文详细介绍了在MFC中使用对话框管理多个编辑框的过程,包括编辑框的初始化、光标位置设置、Tab键切换焦点、消息响应及对象销毁。通过具体代码示例,展示了如何创建、设置和销毁编辑框,以及如何处理WM_KEYDOWN消息实现Tab键导航。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、初始化Init(),需要new五个编辑框,并保存到数组。

void CCTimeTestDlg::Init()
{
	for (int i = 0; i < 5; i++)
	{
		CEdit *p = new CEdit;
		p->Create(WS_CHILD | WS_VISIBLE | ES_LEFT, CRect(100, 50 * (i + 1), 200, 50 * (i + 1) + 20), this, i + 1);
		p->SetWindowText("123456");
		m_arrEdit.push_back(p);
	}

	SetCursorPos();
}

2、OnInitDialog()需要返回false。

	// TODO:  在此添加额外的初始化代码
	Init();
	return FALSE;  // 除非将焦点设置到控件,否则返回 TRUE

3、设置光标位置到文本最后。

void CCTimeTestDlg::SetCursorPos()
{
	CString str;
	m_arrEdit[0]->GetWindowText(str);
	int nLength = str.GetLength();
	m_arrEdit[0]->SetSel(nLength, nLength, FALSE);
	m_arrEdit[0]->SetFocus();
}

4、Tab键切换光标所在编辑框。

BOOL CCTimeTestDlg::PreTranslateMessage(MSG* pMsg)
{
	if (pMsg->message == WM_KEYDOWN)
	{
		if (pMsg->wParam == VK_TAB)
		{
			int nCount = m_arrEdit.size();
			CWnd* pWnd = GetFocus();
			int focusID = pWnd->GetDlgCtrlID();
			CString str;
			if (focusID < nCount)
			{
				m_arrEdit[focusID]->GetWindowText(str);
				int nLength = str.GetLength();
				m_arrEdit[focusID]->SetSel(nLength, nLength, FALSE);
				m_arrEdit[focusID]->SetFocus();
			}
			else if (focusID == nCount)
			{
				focusID = 0;
				m_arrEdit[focusID]->GetWindowText(str);
				int nLength = str.GetLength();
				m_arrEdit[focusID]->SetSel(nLength, nLength, FALSE);
				m_arrEdit[focusID]->SetFocus();
			}
			return TRUE;
		}
	}
	return CDialogEx::PreTranslateMessage(pMsg);
}

5、响应消息WM_DESTROY,析构对象。

void CCTimeTestDlg::DestroyItem()
{
	for (int i = 0; i < m_arrEdit.size();i++)
	{
		CEdit *p = m_arrEdit[i];
		if (p)
			delete p;
		m_arrEdit[i] = NULL;
	}
	m_arrEdit.clear();
}
void CCTimeTestDlg::OnDestroy()
{
	CDialogEx::OnDestroy();

	DestroyItem();
}

运行:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值