Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выделение елемента ListControla при загрузке приложения

538
10 ноября 2007 года
AVDEY
188 / / 17.11.2005
Вобщем мне нужно что бы при загрузке приложения выделялся элемент списка.
Я делаю так
Код:
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);
}

Но почему то выделения нет до нажатия клавиши верх или вниз.
В чем может быть проблема?
435
13 ноября 2007 года
avatara
188 / / 07.07.2003
может попробовать UpdateData(TRUE или FALSE)??
538
14 ноября 2007 года
AVDEY
188 / / 17.11.2005
Цитата: avatara
может попробовать UpdateData(TRUE или FALSE)??



Это не помагает. Фактически выделение происходит, но его пользователю не видно. Как выделить так что бы выделение было видно?

538
21 декабря 2007 года
AVDEY
188 / / 17.11.2005
Вообщем у меня появилась у самого идея, но как ее реализовать пока не знаю. Может нужно послать окну сообщение: ::SendMessage((HWND)GetDlgItem(IDC_LISTCTRL),LVN_ITEMCHANGED,WPARAM,LPARAM);
Но просто не знаю что передать в двух последних параметрах.
Функция на это сообщение в MFC выглядит следующим образом:
void CTESTDlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
342
21 декабря 2007 года
Yos
209 / / 21.06.2003
При нажатии на "стрелки" происходит перерисовка а не обновление данных. Так что тут надо бы сделать через API InvalidateRect или UpdateWindow хотя там наверняка есть "классовые" методы. а для API передаваемый хэндл можно нарыть в свойствах...
320
22 декабря 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: AVDEY
Вобщем мне нужно что бы при загрузке приложения выделялся элемент списка.
Я делаю так ...
Но почему то выделения нет до нажатия клавиши верх или вниз.
В чем может быть проблема?



m_List.SetItemState( int nItem, LVIS_SELECTED, LVIS_SELECTED);
в nItem указываешь номер строки,которую надо выделить.

538
23 декабря 2007 года
AVDEY
188 / / 17.11.2005
"m_Valery":
Большое спасибо, все получилось.
Правда я еще не проверял как это работает при поиске.
538
25 декабря 2007 года
AVDEY
188 / / 17.11.2005
А как программно пролистать список.
пробивал так:
OnVScrollBar(1,10,m_List.GetScrollBar(1));
Но ничего не происходит.
Даже когда мишкой перемещать полосу прокрутки, то функция OnVScrollBar не вызывается.
538
04 ноября 2008 года
AVDEY
188 / / 17.11.2005
Возвращаюсь к этой теме, так как опять пришлось поднять вопрос выделения элемента в списке и прокрутить список чтобы выделений элемент стал видимый.
Так вот, кому интересно, у меня получилась такая функция:
Код:
[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);
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог