美好的一天,
我创建List_Control报告视图的目的是生成一个数据列表,当然用户可以选择他们想要的数据。所以我的问题是显示的第一个项目应该是参考(或)只读目的。这意味着我不希望用户选择它。我已经在网上搜索了几个月的编程背景,这些背景真的很难理解。我使用下面的方法来生成我的数据列表。
lvItem.mask = LVIF_TEXT;
lvItem.iItem = cnt;
lvItem.iSubItem = 0;
lvItem.pszText = data1;
nItem = m_List.InsertItem(&lvItem);
m_List.SetItemText(nItem, 1, data2);
m_List.SetItemText(nItem, 2, data3);
m_List.SetItemText(nItem, 3, data4);
m_List.SetItemText(nItem, 4, data5);
m_List.SetExtendedStyle(m_List.GetExtendedStyle()
|LVS_EX_FULLROWSELECT);
以我幼稚的想法,我希望有一个我可以添加的功能,例如" lvitem.ROWSELECTLock = TRUE"但是当然这个MFC没有提供它。
*侧面话题abit,对我这样的初学者的MFC书的任何推荐?
提前感谢您的回复。
/凯文
答案 0 :(得分:1)
还有另一个关于堆栈溢出的问题,您可以在其中收集禁用选择所需的信息。 How to disable the CListCtrl select option
所以"阻止"只需在第一项上选择你只需在&#34中添加条件;如果"检查"更改" item是你想要的,在你的情况下是第一个(索引从0开始)
if ((pNMLV->uChanged & LVIF_STATE) && (pNMLV->uNewState & LVNI_SELECTED) && pNMLV->iItem == 0)
将方法声明添加到对话框
afx_msg void OnItemchangingList(NMHDR * pNMHDR,LRESULT * pResult);
将条目添加到消息映射中
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
ON_NOTIFY(LVN_ITEMCHANGING, IDC_LIST1, &CMyDialog::OnItemchangingList)
END_MESSAGE_MAP()
将方法添加到" .cpp"对话框的文件(与ClistView方法相同)
void CMyDialog::OnItemchangingList(NMHDR *pNMHDR, LRESULT *pResult)
{
// LVN_ITEMCHANGING notification handler
LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);
// is the user selecting an item?
if ((pNMLV->uChanged & LVIF_STATE) && (pNMLV->uNewState & LVNI_SELECTED) && pNMLV->iItem == 0)
{
// yes - never allow a selected item
*pResult = 1;
}
else
{
// no - allow any other change
*pResult = 0;
}
}
// is the user selecting an item?
if ((pNMLV->uChanged & LVIF_STATE) && (pNMLV->uNewState & LVNI_SELECTED) && pNMLV->iItem == 0)
{
// yes - never allow a selected item
*pResult = 1;
}
else
{
// no - allow any other change
*pResult = 0;
}
醇>