Как програмно изменить стиль елемента управления?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Marjan
Сообщения: 27
Зарегистрирован: 25 авг 2004, 15:28
Откуда: Україна, Львів
Контактная информация:

Привет!
Не знаешь ли Ты как програмно изменить стиль елемента управления? Функция CWnd::ModifyStyle() не меняет стиль. Чтобы было понятнее пример. Я создаю стандартный елемент ComboBox. Он выглядет так:
----------------------------------
| |
---------------------------------
| |
| |
| |
| |
----------------------------------
Я хочу сделать его выпадаючим (Смотри панель address на броузере).
Заранее благодарен.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Проблема-то в чём. Он выпадать не хочет, что ли? :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Marjan
Сообщения: 27
Зарегистрирован: 25 авг 2004, 15:28
Откуда: Україна, Львів
Контактная информация:

Ты не понял. Другой пример. CEdit может быть однострочным или иметь многа строк (стиль ES_MULTILINE). Но после того как ты его создал однострочным ты не можешь сделать его многострочным, и наоборот.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Верно, именно стиль ES_MULTILINE нельзя менять после того, как контрол был создан (так гласит вездесущая MSDN), хотя множество остальных стилей можно изменять с помощью хотя бы SetWindowLong.

Выход такой: Edit не располагаем на форме, а создаём динамически с помощью CreateWindow(CreateWindowEx). В тот момент, когда возникает необходимость изменить его статический стиль - просто убиваем этот едит с помощью DestroyWindow и создаём вновь с требуемым стелем. Для пользователя такие манипуляции пройдут незамеченными... А результат налицо :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Marjan
Сообщения: 27
Зарегистрирован: 25 авг 2004, 15:28
Откуда: Україна, Львів
Контактная информация:

Не красиво как-то, но иного вихода наверное нету. Спасибо за совет! БООООООООООООЛЛЛЛЬЬЬЬЬЬЬЬЬШШООООООООООООООООООООООООООООЕЕЕЕЕЕЕЕЕЕЕЕ
СПОСИБО!!!
Все, що не робиться - на краще!
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Мдя, за такую мелочь, ТАКОЕ спасибо... аж приятно :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить