Junk
Гость
|
|
« : 23-08-2006 12:04 » |
|
Создал контрол CListCtrl m_cListHost; Но никак не получается выделить в нем какой-нибудь элемент. Функция m_cListHost.SetSelectionMark(0); все время возвращает -1. Почему нельзя выделить чего-нибудь? //Перерисовка элементов ListHost void CEYEDlg::RedrawCtrlList(void) { int i=0; LP_APK Temp = FirApk; BOOL state;
m_cListHost.DeleteAllItems(); if (FirApk == NULL) return;
//CtrlList while (Temp) { state = STATE_OFF; if (Temp->time <= StateOffTimes) state = STATE_ON; CtrlListElement(i,Temp->name,state); Temp = Temp->next; i++; } m_cListHost.SetSelectionMark(0); }
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #1 : 23-08-2006 12:47 » |
|
Это работает только если разрешено множественное выделение. У тебя какие стили у ListCtrl? Для других случаев надо делать по другому ф-ей SetItem, заполнив структуру LVITEM, или напрямую. Например, SetItem(0, 0, LVIF_STATE, NULL, 0, LVIS_SELECTED, LVIS_SELECTED, 0);
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Junk
Гость
|
|
« Ответ #2 : 23-08-2006 13:03 » |
|
у меня стоит стиль 'single selection' При выделении элемента в списке эта функция теперь работает, но при запуске программы, когда не выбран ни один элемент - ничего не происходит, хотя она и возвращает 1
Ну ладно, поставил стиль 'Show_selection always', но функция iPos = m_cListHost.GetSelectionMark(); все время возвращает -1, как еще можно узнать, какой элемент в списке выделен?
Я хочу, чтобы при перерисовке CtrlList, у меня оставался выделенным именно тот элемент, кот. был выделен до перерисовки.
|
|
« Последнее редактирование: 19-12-2007 18:31 от Алексей1153++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #3 : 23-08-2006 13:46 » |
|
Да неее Junk, ты не понял. У ListCtrl ты можешь установить стиль, чтобы выделять сразу несколько элементов. В этом случае один из выделенных элементов получает как бы статус активного, ну или первого выделенного. Такая "муравьиная дорожка". Именно это и делает SetSelectionMark. Для этого надо разрешить множественный выбор. Я ща тут глянул в MSDN - я неправильно сказал, я думал что стиль надо включить, оказывается наоборот - надо выключить LVS_SINGLESEL. By default, multiple items may be selected
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Junk
Гость
|
|
« Ответ #4 : 23-08-2006 13:50 » |
|
мне нужно выделять только 1 элемент из списка
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #5 : 23-08-2006 15:08 » |
|
Тогда пользуйся ф-ей SetItem
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Junk
Гость
|
|
« Ответ #6 : 02-10-2006 13:44 » |
|
Как-то мне кажется, что функция m_cListHost.SetItem(iPos, 0, LVIF_STATE, NULL, 0, LVIS_SELECTED, LVIS_SELECTED, 0); выделяет элемент в позиции только на 1 раз, при следующей перерисовки списка iPos = m_cListHost.GetSelectionMark(); возвращает -1 Как сделать так, чтобы элементы в списке "не колбасило"?
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #7 : 02-10-2006 16:47 » |
|
Да нет с ф-ей всё в порядке. Вот только чего ты к SelectionMark привязался? Короче делай раз: int iPos = m_cListHost.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED); два... делать уже не надо
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Junk
Гость
|
|
« Ответ #8 : 03-10-2006 09:38 » |
|
круто!
|
|
|
Записан
|
|
|
|
|