| 
			| 
					
						| Junk 
								Гость
 | 
								|  | «  : 23-08-2006 12:04 »  |  | 
 
 Создал контрол  CListCtrl   m_cListHost; Но никак не получается выделить в нем какой-нибудь элемент. Функция m_cListHost.SetSelectionMark(0);  все время возвращает -1. Почему нельзя выделить чего-нибудь? //Перерисовка элементов ListHostvoid 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 »  |  | 
 
 круто! |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |