list control双击事件中获取行列及通过行列获取列表头

在mfc的list control中有时会用到list control控件,这里说一下如何在双击事件中知道自己双击的是哪一行,哪一列

先定义全局变量

int m_Row = -1,m_Col = -1;

然后在双击事件响应函数中

// TODO: 在此添加控件通知处理程序代码

	NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;     // m_string100是控制变量
	CRect rc;    
	m_Row = pNMListView->iItem;//获得选中的行  
	m_Col = pNMListView->iSubItem;//获得选中列 

这样就能获取到所点击的行列

获取该行列的信息

m_list3.GetItemText(m_Row,m_Col);

m_list3是我list control控件的名字


TCHAR tcText1[MAX_PATH] = {0};	  //获取当前点击列列表头
	HDITEM hdItem1;
	hdItem1.mask = HDI_TEXT;
	hdItem1.pszText = tcText1;
	hdItem1.cchTextMax = MAX_PATH;
	//CString sText;
	if (m_list3.GetHeaderCtrl()->GetItem(m_Col, &hdItem1))    
		sText1 = CString(hdItem1.pszText);

sText1就是你点击的那一列的列名

m_list3.GetHeaderCtrl()->GetItem(m_Col, &hdItem1)  //获取列名的函数


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过以下步骤实现通过点击list control实现排序: 1. 创建一个list control控件。 2. 添加表,可以使用InsertColumn()函数添加。例如,使用以下代码添加两个表: ``` m_listCtrl.InsertColumn(0, _T("Name"), LVCFMT_LEFT, 100); m_listCtrl.InsertColumn(1, _T("Age"), LVCFMT_LEFT, 100); ``` 3. 为list control控件添加LVS_REPORT风格: ``` m_listCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER | LVS_EX_HEADERDRAGDROP | LVS_EX_INFOTIP | LVS_EX_ONECLICKACTIVATE); m_listCtrl.ModifyStyle(0, LVS_REPORT); ``` 4. 为list control控件的表添加点击事件。您可以使用以下代码为表添加点击事件: ``` m_listCtrl.GetHeaderCtrl()->SetCallbackFunc(HeaderCtrlCallback, this); ``` 其,HeaderCtrlCallback是一个回调函数,用于处理表点击事件。示例代码如下: ``` void CALLBACK HeaderCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM pThis) { if (uMsg == HDN_ITEMCLICK) { NMHEADER* pNMHeader = reinterpret_cast<NMHEADER*>(lParam); CListCtrl* pListCtrl = reinterpret_cast<CListCtrl*>(pThis); if (pListCtrl && pNMHeader) { int nColumn = pNMHeader->iItem; bool bAscending = (pListCtrl->GetHeaderCtrl()->GetSortOrder(nColumn) == SORT_ASCENDING); pListCtrl->SortItems(CompareFunc, MAKELONG(nColumn, bAscending)); pListCtrl->GetHeaderCtrl()->SetSortArrow(nColumn, bAscending ? SORT_DESCENDING : SORT_ASCENDING); } } } int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { int nColumn = LOWORD(lParamSort); bool bAscending = HIWORD(lParamSort); CString strItem1 = ((CListCtrl*)lParam1)->GetItemText(LOWORD(lParamSort), nColumn); CString strItem2 = ((CListCtrl*)lParam2)->GetItemText(LOWORD(lParamSort), nColumn); if (bAscending) { return strItem1.Compare(strItem2); } else { return strItem2.Compare(strItem1); } } ``` 在这个示例代码,CompareFunc是一个比较函数,用于排序。当表被点击时,HeaderCtrlCallback函数会调用SortItems()函数进行排序,并且调用GetHeaderCtrl()->SetSortArrow()函数设置排序箭的方向。 以上就是通过点击list control实现排序的步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值