【发布时间】:2018-10-06 07:24:30
【问题描述】:
我有一个名为m_listCtrl 的列表控件CListCtrl,它在创建对话框时显示ID、Firstname 和Lastname。在下面的代码中,我通过获取单击项目的position 并更改该行第一列的值来处理double click。
//This is in the message map and IDC_LISTNAMES is the list control
ON_NOTIFY(NM_DBLCLK, IDC_LISTNAMES, OnDoubleClick)
void CSqlMfcTestDlg::OnDoubleClick(NMHDR* pNMHDR, LRESULT* pResult)
{
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
if (pos == NULL)
{
TRACE(_T("No items were selected!\n"));
}
else
{
while (pos)
{
int nItem = m_listCtrl.GetNextSelectedItem(pos);
itemClicked = nItem;
CString idString = m_listCtrl.GetItemText(nItem, 0);
CString textString = m_listCtrl.GetItemText(nItem, 1);
MessageBox(L"Item Clicked is : " + textString);
m_listCtrl.SetItemText(nItem,0, idString+L"(Clicked)");
}
}
}
我想添加一条语句来更改该行的颜色,而不是 m_listCtrl.SetItemText(nItem,0, idString+L"(Clicked)");。
【问题讨论】:
-
您的代码说 `OnDoubleClick()' 是一个对话框处理程序。在 ListCtrl 对象上尝试一下。
-
我有一个对话框,其中有一个列表控件,我已将
m_listCtrl样式设置为ListView_SetExtendedListViewStyle(m_listCtrl, LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);代码工作正常,但不是更改列表控件中的值,而是我想找到一种改变该行颜色的方法 -
现在将 m_listCtrl 声明为 MyListCtrl,其中 MyListCtrl 是从 CListctrl 派生的类。之后为 MyListCtrl 添加新的消息处理程序。您当前的代码只会拦截对话框控件上的双击。
-
如果选中,该行会改变颜色。在
OnInitDialog中添加m_listCtrl.ModifyStyle(0, LVS_SHOWSELALWAYS);,以便选择始终可见。还是要改成自定义颜色? -
上下文是,在单击列表控件中的项目时,我想添加一个注释并显示该注释已添加,我想更改该行的颜色。从某种意义上说,它应该持续存在,当我重新打开应用程序时,我仍然希望带有注释的行是我设置的颜色。我试着在网上找这个,但没有找到太多
标签: c++ visual-c++ mfc clistctrl