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

第一步:添加一个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);
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值