MFC 给列表控件发送左键单击、双击、以及右键单击消息

void CTestsetting::SendClickToList()
{
	NMITEMACTIVATE NMItemActive;
	NMHDR thdr;
	thdr.code = NM_CLICK;					//NM_CLICK单击	NM_DBLCKL 双击  NM_RCLICK右键单击
	thdr.hwndFrom = m_TestsetList.m_hWnd;	//m_TestList是列表控件关联的变量
	thdr.idFrom = IDC_TESTSETTING_LIST;		//IDC_TESTSETTING_LIST  列表控件ID
	NMItemActive.hdr = thdr;
	NMItemActive.iItem = m_TestsetList.GetItemCount();
	NMItemActive.iItem = 0;					//设置选中第几行
	NMItemActive.iSubItem = 1;				//设置选中第几列
	m_TestsetList.SetSelectionMark(0);
	SendMessage(WM_NOTIFY, IDC_TESTSETTING_LIST, (LPARAM)&NMItemActive);	//把消息发送给列表所在地父窗口,由父窗口转发,而不是直接转发给列表
}

添加列表左键单击响应函数

void CTestsetting::OnNMClickTestsettingList(NMHDR* pNMHDR, LRESULT* pResult)
{
	//因为是测试所以是随便写的变量
	LPNMITEMACTIVATE temp = (LPNMITEMACTIVATE)pNMHDR;//将传进来的消息转换成LPNMITEMACTIVAT
	int nItem = temp->iItem;//获得行号
	int nSubItem = temp->iSubItem;//获得列号
	TRACE("%d, %d\n", nItem, nSubItem);
	*pResult = 0;
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以通过以下步骤实现: 1. 在 CListCtrl 的创建时设置 LVS_EDITLABELS 样式,这个样式可以让用户双击列表项时编辑文本。 2. 在 CListCtrl 的 OnDblClick() 函数中处理双击事件,可以使用 EditLabel() 函数让当前选中的列表项变为可编辑状态。 3. 在 CListCtrl 的 OnEndLabelEdit() 函数中处理编辑完成事件,可以获取用户输入的文本,并更新列表项的文本内容。 下面是一个示例代码: ``` // 创建列表控件 CRect rect(10, 10, 300, 200); DWORD dwStyle = WS_VISIBLE | WS_BORDER | LVS_REPORT | LVS_EDITLABELS; m_listCtrl.Create(dwStyle, rect, this, IDC_LIST_CTRL); // 设置列表控件的列头 m_listCtrl.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 100); m_listCtrl.InsertColumn(1, _T("年龄"), LVCFMT_LEFT, 100); // 在列表控件的 OnDblClick 函数中处理双击事件 void CMyDialog::OnDblClickListCtrl(NMHDR* pNMHDR, LRESULT* pResult) { NMITEMACTIVATE* pActivate = (NMITEMACTIVATE*)pNMHDR; if (pActivate->iItem >= 0 && pActivate->iSubItem >= 0) { // 使用 EditLabel 函数让当前选中的列表项变为可编辑状态 m_listCtrl.EditLabel(pActivate->iItem); } *pResult = 0; } // 在列表控件的 OnEndLabelEdit 函数中处理编辑完成事件 void CMyDialog::OnEndLabelEditListCtrl(NMHDR* pNMHDR, LRESULT* pResult) { LVITEM lvItem = { 0 }; lvItem.mask = LVIF_TEXT; lvItem.iItem = ((NMLVDISPINFO*)pNMHDR)->item.iItem; lvItem.iSubItem = ((NMLVDISPINFO*)pNMHDR)->item.iSubItem; lvItem.pszText = ((NMLVDISPINFO*)pNMHDR)->item.pszText; // 获取用户输入的文本,并更新列表项的文本内容 m_listCtrl.SetItem(&lvItem); *pResult = 0; } ``` 在上面的代码中,CMyDialog 是一个对话框类,m_listCtrl 是一个 CListCtrl 成员变量,OnDblClickListCtrl() 和 OnEndLabelEditListCtrl() 是列表控件消息响应函数。你可以将这些代码添加到你的 MFC 应用程序中,并根据需要进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值