MFC CListCtrl不响应LVN_GETDISPINFO消息

来源:互联网 发布:小学生机器人编程 编辑:程序博客网 时间:2024/06/06 01:01

今天写程序给对话框加了个列表控件CListCtrl【拖进去的控件】,用来显示类中一个Vector的内容。由于这个控件之前就用过很多遍了,已经知道如果列表想要响应LVC_GETDISPINFO消息,必须使能LVS_OWNERDATA风格。所以在OnInitDialog( )里面写了如下代码:

m_listCtrl.ModifyStyle(0, LVS_OWNERDATA|LVS_REPORT|LVS_SINGLESEL);m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle()|LVS_EX_FULLROWSELECT);m_listCtrl.InsertColumn(0, _T("ID"), 0, 150);m_listCtrl.InsertColumn(1, _T("Data"), 0, 300);

然后绑定消息响应函数:

void CListCtrlTestDlg::OnLvnGetdispinfoList1(NMHDR *pNMHDR, LRESULT *pResult){NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);// TODO: 在此添加控件通知处理程序代码int nItem = pDispInfo->item.iItem;int nSubItem = pDispInfo->item.iSubItem;if(nSubItem==0)pDispInfo->item.pszText = _T("111");*pResult = 0;}

本以为程序即将完美运行,然而并没有。调试发现,OnLvnGetDispinfoList1( ),根本就不会进入,这下坑大了。

无奈之下,在ModifyStyle之后加了个GetStyle( )看看有没有设置进去。

结果发现果然没有!

然后,因为控件是拖进去的,所以再试了一下,在控件属性那里把“Owner data”设置为TRUE。

竟然就可以了。

好吧,深呼吸,程序员是不怕坑的。总结一下:

在CListCtrl Create了之后再去设置LVS_OWNERDATA目测是没有用的,必须在Create的时候就把这个style写上。

0 0
原创粉丝点击