CListCtrl m_LIST;
BOOL CTESTDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_LIST.InsertColumn(0,"",LVCFMT_LEFT,50,0);
m_LIST.InsertColumn(1,"",LVCFMT_LEFT,50,1);
DWORD ExStyle = m_LIST.GetExtendedStyle();
ExStyle |= LVS_EX_FULLROWSELECT;
m_LIST.SetExtendedStyle(ExStyle);
LVITEM lvitem;
lvitem.mask=LVIF_TEXT;
for(int i=0; i<10;i++)
{
lvitem.iSubItem=0;
lvitem.iItem=i;
lvitem.pszText="AAAAAA";
m_LIST.InsertItem(&lvitem);
lvitem.iSubItem=1;
lvitem.pszText="A2";
m_LIST.SetItem(&lvitem);
}
m_LIST.SetFocus();
m_LIST.SetSelectionMark(0);
}
Выделение елемента ListControla при загрузке приложения
Я делаю так
Код:
Но почему то выделения нет до нажатия клавиши верх или вниз.
В чем может быть проблема?
может попробовать UpdateData(TRUE или FALSE)??
Цитата: avatara
может попробовать UpdateData(TRUE или FALSE)??
Это не помагает. Фактически выделение происходит, но его пользователю не видно. Как выделить так что бы выделение было видно?
Но просто не знаю что передать в двух последних параметрах.
Функция на это сообщение в MFC выглядит следующим образом:
void CTESTDlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
При нажатии на "стрелки" происходит перерисовка а не обновление данных. Так что тут надо бы сделать через API InvalidateRect или UpdateWindow хотя там наверняка есть "классовые" методы. а для API передаваемый хэндл можно нарыть в свойствах...
Цитата: AVDEY
Вобщем мне нужно что бы при загрузке приложения выделялся элемент списка.
Я делаю так ...
Но почему то выделения нет до нажатия клавиши верх или вниз.
В чем может быть проблема?
Я делаю так ...
Но почему то выделения нет до нажатия клавиши верх или вниз.
В чем может быть проблема?
m_List.SetItemState( int nItem, LVIS_SELECTED, LVIS_SELECTED);
в nItem указываешь номер строки,которую надо выделить.
Большое спасибо, все получилось.
Правда я еще не проверял как это работает при поиске.
пробивал так:
OnVScrollBar(1,10,m_List.GetScrollBar(1));
Но ничего не происходит.
Даже когда мишкой перемещать полосу прокрутки, то функция OnVScrollBar не вызывается.
Так вот, кому интересно, у меня получилась такая функция:
Код:
[color=blue]void[/color] SelectItem(CListCtrl& m_List, UINT uiItem)
{
CSize sz;
sz.cx=0;
sz.cy=(uiItem-m_List.GetScrollPos(SB_VERT))*14;
[color=green]/*14 - экспериментально найденное число которое соответствует
высоте строки в пикселях*/[/color]
m_List.Scroll(sz);
[color=blue]if[/color](m_List.GetSelectionMark()!=-1)
m_List.SetItemState( m_List.GetSelectionMark(), LVIS_ACTIVATING, LVIS_SELECTED);
m_List.SetItemState( uiItem, LVIS_SELECTED, LVIS_SELECTED);
m_List.SetSelectionMark(uiItem);
}
{
CSize sz;
sz.cx=0;
sz.cy=(uiItem-m_List.GetScrollPos(SB_VERT))*14;
[color=green]/*14 - экспериментально найденное число которое соответствует
высоте строки в пикселях*/[/color]
m_List.Scroll(sz);
[color=blue]if[/color](m_List.GetSelectionMark()!=-1)
m_List.SetItemState( m_List.GetSelectionMark(), LVIS_ACTIVATING, LVIS_SELECTED);
m_List.SetItemState( uiItem, LVIS_SELECTED, LVIS_SELECTED);
m_List.SetSelectionMark(uiItem);
}