双击调用ComboBox和E编辑ListCtrl中的数据

本文介绍如何使用ListCtrl、Edit和ComboBox控件实现列表项的编辑功能。通过设置ListCtrl风格,添加响应事件,实现在列表中直接编辑文本和下拉选择。文章详细描述了事件处理流程,包括获取选中位置、显示编辑控件、处理编辑完成。

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

第一步:添加一个ListCtrl、一个Edit、一个ComboBox,并关联变量,m_list,m_edit,m_combo。

第二步:将list控件设置风格m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);如果不设置该风格,后面获取选中列始终返回-1,并添加数据。
在ComboBox上添加数据。

第三步:为listCtrl添加双击响应事件。代码如下。其中需判断combobox判断是否可见,否则会出错。

LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);

	if (m_combo.IsWindowVisible())
		return;

	//获取listctrl选中的行、列
	m_row = pNMItemActivate->iItem;
	m_col = pNMItemActivate->iSubItem;

	CRect rect;
	if (m_col == 2)
	{
		m_list.GetSubItemRect(m_row, m_col, LVIR_LABEL, rect);//获取双击处的位置
		m_combo.SetParent(&m_list);//设置父窗口为list控件
		m_combo.MoveWindow(rect);//将combobox移动到选中位置
		m_combo.ShowWindow(SW_SHOW);//显示combobox
		m_combo.SetCurSel(0);
	}
	else
	{
		m_list.GetSubItemRect(m_row, m_col, LVIR_LABEL, rect);
		m_edit.SetParent(&m_list);
		m_edit.MoveWindow(rect);
		m_edit.SetWindowText(m_list.GetItemText(m_row, m_col)); 
		m_edit.ShowWindow(SW_SHOW);
		m_edit.SetFocus();
		m_edit.ShowCaret();
		m_edit.SetSel(-1);
	}
	
	*pResult = 0;

第四步:ComboBox添加选择响应事件,双击控件即可。Edit添加失去焦点响应事件,就是EN_KILLFOCUS消息。

void CListEditDlg::OnCbnSelchangeCombo1()
{
	CString tmp;
	int index = m_combo.GetCurSel();
	m_combo.GetLBText(index, tmp);
	m_list.SetItemText(m_row, m_col, tmp);
	m_combo.ShowWindow(SW_HIDE);
}


void CListEditDlg::OnEnKillfocusEdit1()
{
	CString tmp;
	m_edit.GetWindowTextW(tmp);
	m_list.SetItemText(m_row, m_col, tmp);
	m_edit.ShowWindow(SW_HIDE);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值