снова CListBox
От: Victoria  
Дата: 01.04.03 09:58
Оценка:
как динамически разрешить выделять несколько строк в CListBox?
Re: снова CListBox
От: Кирпа В.А. Украина  
Дата: 01.04.03 10:01
Оценка: 3 (1)
Здравствуйте, Victoria, Вы писали:

V>как динамически разрешить выделять несколько строк в CListBox?


А снова попробовать ?
CWnd::ModifyStyle(0, LBS_MULTIPLESEL);
!0xDEAD
Re: снова CListBox
От: Amor Россия  
Дата: 01.04.03 10:01
Оценка: 3 (1)
Здравствуйте, Victoria, Вы писали:

V>как динамически разрешить выделять несколько строк в CListBox?


m_listbox.SetWindowLong( GWL_STYLE, LBS_EXTENDEDSEL | m_listbox.GetWindowLong() )
Re[2]: снова CListBox
От: Victoria  
Дата: 01.04.03 10:16
Оценка:
Здравствуйте, Amor, Вы писали:

A>Здравствуйте, Victoria, Вы писали:


V>>как динамически разрешить выделять несколько строк в CListBox?


A>m_listbox.SetWindowLong( GWL_STYLE, LBS_EXTENDEDSEL | m_listbox.GetWindowLong() )



SetWindowLong is not a member of 'CListBox'
Re[2]: снова CListBox
От: Victoria  
Дата: 01.04.03 10:17
Оценка:
Здравствуйте, Кирпа В.А., Вы писали:

КВА>Здравствуйте, Victoria, Вы писали:


V>>как динамически разрешить выделять несколько строк в CListBox?


КВА>А снова попробовать ?

КВА>CWnd::ModifyStyle(0, LBS_MULTIPLESEL);
В InitDialog написала
GetDlgItem(IDC_LIST_USER)->ModifyStyle(0, LBS_MULTIPLESEL);
UpdateData(FALSE);

Но не получилось
Re[3]: снова CListBox
От: Amor Россия  
Дата: 01.04.03 10:24
Оценка:
Здравствуйте, Victoria, Вы писали:

V>Здравствуйте, Amor, Вы писали:


A>>Здравствуйте, Victoria, Вы писали:


V>>>как динамически разрешить выделять несколько строк в CListBox?


A>>m_listbox.SetWindowLong( GWL_STYLE, LBS_EXTENDEDSEL | m_listbox.GetWindowLong() )


V>

V>SetWindowLong is not a member of 'CListBox'

Да, действительно, почему-то таких нет. Ну это я написал с намеком на WinAPI. Т.е. можно так в чистом Winapi.
SetWindowLong( hwndListBox, GWL_STYLE, LBS_EXTENDEDSEL | GetWindowLong( hwndListBox, GWL_STYLE ) );

Может ModifyStyle поможет?
Re[3]: снова CListBox
От: Vicont Россия  
Дата: 01.04.03 10:27
Оценка:
Здравствуйте, Victoria, Вы писали:

V>Здравствуйте, Кирпа В.А., Вы писали:


КВА>>Здравствуйте, Victoria, Вы писали:


V>>>как динамически разрешить выделять несколько строк в CListBox?


КВА>>А снова попробовать ?

КВА>>CWnd::ModifyStyle(0, LBS_MULTIPLESEL);
V>В InitDialog написала
GetDlgItem(IDC_LIST_USER)->>ModifyStyle(0, LBS_MULTIPLESEL);
V>UpdateData(FALSE);

V>Но не получилось


GetDlgItem(IDC_LIST_USER)->>ModifyStyle(LVS_SINGLESEL, LBS_MULTIPLESEL);
так попробуй...
Re[4]: снова CListBox
От: Vicont Россия  
Дата: 01.04.03 10:31
Оценка:
Здравствуйте, Vicont, Вы писали:

V>Здравствуйте, Victoria, Вы писали:


V>>Здравствуйте, Кирпа В.А., Вы писали:


КВА>>>Здравствуйте, Victoria, Вы писали:


V>>>>как динамически разрешить выделять несколько строк в CListBox?


КВА>>>А снова попробовать ?

КВА>>>CWnd::ModifyStyle(0, LBS_MULTIPLESEL);
V>>В InitDialog написала
GetDlgItem(IDC_LIST_USER)->>>ModifyStyle(0, LBS_MULTIPLESEL);
V>>UpdateData(FALSE);

V>>Но не получилось


GetDlgItem(IDC_LIST_USER)->>>ModifyStyle(LVS_SINGLESEL, LBS_MULTIPLESEL);
V>так попробуй...

Извиняюсь, я его с лист контролом спутал
Re: снова CListBox
От: Кирпа В.А. Украина  
Дата: 01.04.03 12:07
Оценка:
Здравствуйте, Victoria, Вы писали:

V>как динамически разрешить выделять несколько строк в CListBox?


некоторые стили нельзя поменять динамически
Видимо к таким относится и стиль LBS_MULTIPLESEL
Я помню бился головой о стенку когда хотел поменять в едите ES_LEFT на ES_RIGHT
Пришлось старый едит дестроить и на его месте создавать новый (уже с другим стилем)
Может таким путем поступить и с листбоксом?
!0xDEAD
Re[5]: снова CListBox
От: Victoria  
Дата: 01.04.03 13:43
Оценка:
Здравствуйте, Vicont, Вы писали:

V>Здравствуйте, Vicont, Вы писали:


V>>Здравствуйте, Victoria, Вы писали:


V>>>Здравствуйте, Кирпа В.А., Вы писали:


КВА>>>>Здравствуйте, Victoria, Вы писали:


V>>>>>как динамически разрешить выделять несколько строк в CListBox?


КВА>>>>А снова попробовать ?

КВА>>>>CWnd::ModifyStyle(0, LBS_MULTIPLESEL);
V>>>В InitDialog написала
GetDlgItem(IDC_LIST_USER)->>>>ModifyStyle(0, LBS_MULTIPLESEL);
V>>>UpdateData(FALSE);

V>>>Но не получилось


GetDlgItem(IDC_LIST_USER)->>>>ModifyStyle(LVS_SINGLESEL, LBS_MULTIPLESEL);
V>>так попробуй...

V>Извиняюсь, я его с лист контролом спутал

Сделала, но эффекта никакого
Re[2]: снова CListBox
От: Victoria  
Дата: 01.04.03 13:45
Оценка:
Здравствуйте, Кирпа В.А., Вы писали:

КВА>Здравствуйте, Victoria, Вы писали:


V>>как динамически разрешить выделять несколько строк в CListBox?


КВА>некоторые стили нельзя поменять динамически

КВА>Видимо к таким относится и стиль LBS_MULTIPLESEL
КВА>Я помню бился головой о стенку когда хотел поменять в едите ES_LEFT на ES_RIGHT
КВА>Пришлось старый едит дестроить и на его месте создавать новый (уже с другим стилем)
КВА>Может таким путем поступить и с листбоксом?
Что-то у меня такое же подозрение...
Re[4]: снова CListBox
От: aryb Россия http://alekseyrybakov.narod.ru
Дата: 02.04.03 13:33
Оценка:
A>SetWindowLong( hwndListBox, GWL_STYLE, LBS_EXTENDEDSEL | GetWindowLong( hwndListBox, GWL_STYLE ) );


Может помочь последовательный вызов SetWindowLong и SetWindowPos.
Вот что написано в MSDN:
If you have changed certain window data using SetWindowLong, you must call SetWindowPos to have the changes take effect. Use the following combination for uFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED.
Re: снова CListBox
От: Shlapobersky Alex Россия  
Дата: 02.04.03 15:21
Оценка:
В попытке найти ответ обнаружил интересную вещь в CListBox

SWORD styleold=GetStyle();//Допустим ответ styleold=0x84c800c4, у меня был такой
ModifyStyle(0,1); //Функция вернула 1, то есть сработала
DWORD stylenew=GetStyle();//Возвратила те же styleold=0x84c800c4  :???:


В функцию ModifyStule() можно подставлять и символьные константы — результат тот же, стиль не меняется.
Наверное, это какая-то особенность CListBox.
Re[3]: снова CListBox
От: creatio Украина  
Дата: 02.04.03 15:24
Оценка:
V>Что-то у меня такое же подозрение...
Подтверждаю, в MSDN по этому поводу сказано однозначно — стили для ListBox не могут быть изменены на этапе выполнения после создания, так что придётся обходить.
Why do you call Visual Studio 'your bunny'?...
(c) one american colleague
Re[2]: снова CListBox
От: Shlapobersky Alex Россия  
Дата: 03.04.03 13:35
Оценка: 22 (2)
Прошу прощения, нашёл ошибку — стиль меняется, но результат для CListBox тот же.
В MSDN сказано:
Windows can set and clear the following styles over the lifetime of a window: WS_CLIPSIBLINGS, WS_DISABLED, WS_HSCROLL, WS_MAXIMIZE, WS_MINIMIZE, WS_SYSMENU (for MDI child windows), WS_THICKFRAME, WS_VISIBLE, and WS_VSCROLL. Windows will not dynamically set or clear any of the other styles. An application can modify the style state at the GWL_STYLE offset at any time by calling SetWindowLong(hWnd, GWL_STYLE, dwNewLong), but Windows will not be aware that the style has changed. Windows maintains some internal flags on the window style and may use these rather than checking the GWL_STYLE offset of the window data structure.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.