得到单击的listctrl的行列号

//得到单击的listctrl的行列号
//添加ListCtrl控件的NM_CLICK消息相应函数
void CTestDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
 // 方法一:
 /*
 DWORD dwPos = GetMessagePos();
 CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
 
 m_list.ScreenToClient(&point);
 
 LVHITTESTINFO lvinfo;
 lvinfo.pt = point;
 lvinfo.flags = LVHT_ABOVE;
 
 int nItem = m_list.SubItemHitTest(&lvinfo);
 if(nItem != -1)
 {
  CString strtemp;
  strtemp.Format("单击的是第%d行第%d列", lvinfo.iItem, lvinfo.iSubItem);
  AfxMessageBox(strtemp);
 }
 */
 
 // 方法二:
 /*
 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
 if(pNMListView->iItem != -1)
 {
  CString strtemp;
  strtemp.Format("单击的是第%d行第%d列",
  pNMListView->iItem, pNMListView->iSubItem);
  AfxMessageBox(strtemp);
 }
 */
 *pResult = 0;
}


关于NMHDR
WM_NOTIFY消息在lParam参数中携带着指向NMHDR结构的指针,NMHDR定义如下:
typedef struct tagNMHDR {
    HWND hwndFrom;
    UINT idFrom;
    UINT code;
}NMHDR;

hwndFrom是发送通知消息的窗口句柄。对属性页来说,就是属性页窗口。如果是控件发送通知的话,idFrom就是控件ID。最后一个code域包含的是通知码。虽然这个基本结构没有包含任何更多的信息,但它几乎总是可以扩展的,可以使用附加域来扩展它。通知码指出有什么样的附加域附加到了该通知结构里。

不同的控件,不同的消息可能需要传递的信息不同。
结构NMHDR包含最基本的信息,其他不同的结构都是以NMHDR为基础,在后面附加各自的信息。
你通过结构的命名,可以知道这个结构是用于哪个控件的。
如NMLISTVIEW显然是用于ListView,NMTREEVIEW 显然是用于TreeView。

所以,要判断转成哪一种形式,就要知道是针对的哪个控件,哪个消息

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值