![]() |
|
|
![]()
|
|
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 1 Всего: 5 |
Вот, собственно, код, который ничего не делает:
В MSDN по поводу SetWindowLongPtr сказано, что, дескать, "Certain window data is cached, so changes you make using SetWindowLongPtr will not take effect until you call the SetWindowPos function.". Вот я и пробую этот самый SetWindowPos и ничего не происходит... Изначально код предназначался для изменения атрибутов окна согласно состоянию CheckBox'ов, но в ходе поиска рабочего варианта я, как видите, часть его закомментировал и он теперь должен только удалять стиль LBS_DISABLENOSCROLL, однако и этого он не делает. Что интересно, в последней строчке в переменную Style записывается значение без LBS_DISABLENOSCROLL, т.е. значение все-таки меняется, но не изменяется внешний вид окна... Может, надо что-то добавить во флажки SetWindowPos? Примечание: окно, которое я мучаю, - это ListBox, пока не содержащий элементов. Еще примечание: после этого я перерисовываю окно и оно рисуется, как прежде, с отключенной (disabled) полосой прокрутки. Это сообщение отредактировал(а) 0x07L - 20.7.2006, 16:08 |
|||
|
||||
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: нет Всего: 1 |
Может я конечно и путаю, но для элементов есть очень простая функция изменения стиля : ModifyStyle(какие_стили_убрать, какие_добавить)
m_btn->ModifyStyle(WS_VISIBLE, 0 ) и кнопка исчезает =)) |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
1) Действительно, удобнее пользоваться CWnd::ModifyStyle - она вызывает тот же SetWindowLong, но сама определяет что куда
2) При изменении стиля обычно достаточно флагов SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED 3) Изменился стиль или нет - удобнее проверять при помощи Spy. 4) Попробуй с другим стилем - тем же WS_BORDER. -------------------- ... |
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 1 Всего: 5 |
1) Про ModifyStyle я знаю. Пробовал его до SetWindowLongPtr. Результаты те же.
2) Проверял изменение стилей с помощью Spy. Действительно, стиля LBS_DISABLENOSCROLL больше нет, но окно по-прежнему отображается как раньше. 3) С WS_BORDER действует... |
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 1 Всего: 5 |
Ладно, будем считать, что никому после создания окна не нужно менять стиль WS_DISABLENOSCROLL
|
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 1 Всего: 5 |
Если же говорить честно, то дело, видимо, в том, что реализация стиля WS_BORDER (рисование рамки) осуществляется системой (если говорить конкретнее, функцией DefWindowProc), а реализация WS_DISABLENOSCROLL возложена на функцию элемента управления и DefWindowProc этот стиль игнорирует. ListBox стиль WS_DISABLENOSCROLL во время создания окна сохраняет где-то у себя и во время выполнения пользуется сохраненным значением и игнорирует стиль WS_DISABLENOSCROLL в стилях окна, хотя последний может изменяться. Плохо, что в MSDN об этом не сказано...
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |