Прошу прощения, нашёл ошибку — стиль меняется, но результат для 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.
Здравствуйте, Кирпа В.А., Вы писали:
КВА>Здравствуйте, Victoria, Вы писали:
V>>как динамически разрешить выделять несколько строк в CListBox?
КВА>А снова попробовать ? КВА>CWnd::ModifyStyle(0, LBS_MULTIPLESEL);
В InitDialog написала
GetDlgItem(IDC_LIST_USER)->ModifyStyle(0, LBS_MULTIPLESEL);
UpdateData(FALSE);
Здравствуйте, 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.
Здравствуйте, 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>>Но не получилось
Здравствуйте, Victoria, Вы писали:
V>как динамически разрешить выделять несколько строк в CListBox?
некоторые стили нельзя поменять динамически
Видимо к таким относится и стиль LBS_MULTIPLESEL
Я помню бился головой о стенку когда хотел поменять в едите ES_LEFT на ES_RIGHT
Пришлось старый едит дестроить и на его месте создавать новый (уже с другим стилем)
Может таким путем поступить и с листбоксом?
Здравствуйте, 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>Извиняюсь, я его с лист контролом спутал
Сделала, но эффекта никакого
Здравствуйте, Кирпа В.А., Вы писали:
КВА>Здравствуйте, Victoria, Вы писали:
V>>как динамически разрешить выделять несколько строк в CListBox?
КВА>некоторые стили нельзя поменять динамически КВА>Видимо к таким относится и стиль LBS_MULTIPLESEL КВА>Я помню бился головой о стенку когда хотел поменять в едите ES_LEFT на ES_RIGHT КВА>Пришлось старый едит дестроить и на его месте создавать новый (уже с другим стилем) КВА>Может таким путем поступить и с листбоксом?
Что-то у меня такое же подозрение...
Может помочь последовательный вызов 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.
В попытке найти ответ обнаружил интересную вещь в CListBox
SWORD styleold=GetStyle();//Допустим ответ styleold=0x84c800c4, у меня был такой
ModifyStyle(0,1); //Функция вернула 1, то есть сработала
DWORD stylenew=GetStyle();//Возвратила те же styleold=0x84c800c4 :???:
В функцию ModifyStule() можно подставлять и символьные константы — результат тот же, стиль не меняется.
Наверное, это какая-то особенность CListBox.
V>Что-то у меня такое же подозрение...
Подтверждаю, в MSDN по этому поводу сказано однозначно — стили для ListBox не могут быть изменены на этапе выполнения после создания, так что придётся обходить.
Why do you call Visual Studio 'your bunny'?...
(c) one american colleague