文章目录
1、HDN_ITEMCLICK消息
1.1、三个结构体
1.1.1、NMHDR 结构(richedit.h)**
typedef struct _nmhdr {
HWND hwndFrom; //发送消息控件的窗口句柄
UINT idFrom; //发送消息的控件的标识符
UINT code; //通知码
} NMHDR;
1.1.2、NMLISTVIEW 结构 (commctrl.h)
- 此结构与NM_LISTVIEW结构相同,重命名以符合标准命名约定。
句法
typedef struct tagNMLISTVIEW {
NMHDR hdr;
int iItem;
int iSubItem; //列
UINT uNewState;
UINT uOldState;
UINT uChanged;
POINT ptAction;
LPARAM lParam;
} NMLISTVIEW, *LPNMLISTVIEW;
1.1.3、NMITEMACTIVATE 结构 (commctrl.h)
typedef struct tagNMITEMACTIVATE {
NMHDR hdr;
int iItem;
int iSubItem;
UINT uNewState;
UINT uOldState;
UINT uChanged;
POINT ptAction;
LPARAM lParam;
UINT uKeyFlags; //激活时按下的修饰键。
} NMITEMACTIVATE, *LPNMITEMACTIVATE;
- uKeyFlags 按下的键
LVKF_ALT
LVKF_CONTROL
LVKF_SHIFT
1.2、判断按键是否按下
判断LPNMITEMACTIVATE
结构体uKeyFlags
字段:
void CTabDlg::OnClickList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
if(LVKF_ALT==pNMItemActivate->uKeyFlags)
AfxMessageBox("Alt键被按下");
*pResult = 0;
}
1.3、判断鼠标点击的字段
void CTabDlg::OnClickList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
int nSelCol=pNMListView->iSubItem;
int nSelRow=m_list.GetSelectionMark();
CString strSelText=m_list.GetItemText(nSelRow,nSelCol);
AfxMessageBox("被点击的是"+strSelText);
*pResult = 0;
}