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.
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() )
снова CListBox
От: Victoria  
Дата: 01.04.03 09:58
Оценка:
как динамически разрешить выделять несколько строк в CListBox?
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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.