Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Элемент управления

397
20 ноября 2007 года
SergPas
527 / / 03.02.2007
Как создать такую панель?
[ATTACH]2398[/ATTACH]
5.1K
21 ноября 2007 года
12345678
93 / / 16.12.2006
Стандартных контролов таких как ета панель в винде, насколько я знаю, нет. Контрол надо рисовать "ручками" к примеру на елементе управления типа "STATIC". Сперва надо создать контекст hDC в памяти, рисовать в нем все что угодно и потом когда контрол получит WM_PAINT - копироваит етот контекст в контекст контрола, ну а дальше все зависит от фантазии и опыта.
397
21 ноября 2007 года
SergPas
527 / / 03.02.2007
А как тогда в Windows это панель реализована? Ведь она же реализована, ведь так? Должно же быть какое-то окно... Может быть оно и есть, да просто не задокументировано...
Даже если самому реализовывать, то можно столкнуться с проблемами организации такого окна.
Так, например, вы в качестве "холста" выбираете предопределённое окно "STATIC". Затем создаёте контекст устройства в памяти, там рисуете, а потом копируете этот контекст в контекст "STATIC". А как же обработка? Уж не хотите ли вы создавать и обрабатывать сообщения, поступаемые от нарисованных вами в контексте изображений? По сути, дочерними элементами такой панели будут элементы управления типа "STATIC", являющиеся ссылками, заменяющими, скажем, меню программы. Реализовать анимацию окон в Windows проще паренной репы; здесь достаточно использовать пару функций - AnimateWindow и SetLayeredWindowAttributes. В принципе самому создать такую панель не сложно; просто я думал, что есть такой элемент управления в Windows (может быть он и существует).
5.1K
21 ноября 2007 года
12345678
93 / / 16.12.2006
Скорей всего такого контрола нет (эта панель включает в себя другие элементы управления, чего нельзя сказать ни про один другой елемент управления в винде: BUTTON, STATIC, EDIT, Sys(Tree/List)View32).
А вот для получения сообщений от кнопок и различных ссылок на твоей панели есть два возможных варианта: 1) запоминать положения всех контролов на панели и при получении сообщения от грызуна вычислять над каким контролом мышка и делать соответствующие действия. 2) рисовать каждый елемент на отдельном контроле "STATIC" и принимать сообщения от него.
Если тебе нужена всего одна такая панель (не больше одной панели в программе) и при условии что панель будет с предопределенным количеством вкладок, то тут тебе в помощь "дубовый" код т.е. Пишеш функцию для анимации одной вкладки, потом второй и т.д. и кнопки на них размещаеш в виде отдельных контролов "STATIC" (чтоб легче было) ну а для самих ссылок делаеш функции типа: add_link и delete_link ссылки с их иконками добавляеш га основную форму в виде отдельного того же "STATIC" и храниш в памяти список всех ссылок и к какой ссылке какой hwnd относиться. Ну а когда приходит какое нить сообщение на ссылку - вычисляем к какой ссылке относиться hwnd и... вуаля, короче, все должно получиться.

PS AnimateWindow и SetLayeredWindowAttributes в дочерних окнах, если юзать AlphaBlend, откажуться работать.
PPS хоть бы не забанили за такие мемуары... :)
534
22 ноября 2007 года
HarryAxe
448 / / 19.01.2006
Я, в своё время, тоже задавался подобным вопросом. Результаты исследований показали, что стандартных элементов управления для rollout-панелей действительно нет. В проводнике своя реализация, в PartitionMagic - другая, в Nero - третья, Max вообще внешне весь на них построен.
С другой стороны, такая панелька реализуется, в принципе, легко и просто, если содержимое панелей представлять в виде созданных заранее диалогов с border=none. Всё остальное - дело техники, и особых сложностей вызвать не должно, в особенности, если в приложении использовать архитектуру документ/вид.
397
23 ноября 2007 года
SergPas
527 / / 03.02.2007
Цитата:
PS AnimateWindow и SetLayeredWindowAttributes в дочерних окнах, если юзать AlphaBlend, откажуться работать.


AnimateWindow прекрасно работает с анимацией дочерних окон при их скольжении или свёртывании сверху вниз (снизу вверх), как это сделано в панели. Функция AnimateWindow не будет работать в случае эффекта плавного растворения для дочерних окон. Теоретически функция SetLayeredWindowAttributes должна изменять "степень прозрачности" для любых окон. Здесь возникает сложность одновременного использования этих двух эффектов. Хотя и эта проблема разрешима, если код изменения "степени прозрачности" разместить в новом потоке.

Цитата:
Пишеш функцию для анимации одной вкладки, потом второй и т.д. и кнопки на них размещаеш в виде отдельных контролов "STATIC" (чтоб легче было) ну а для самих ссылок делаеш функции типа: add_link и delete_link ссылки с их иконками добавляеш га основную форму в виде отдельного того же "STATIC" и храниш в памяти список всех ссылок и к какой ссылке какой hwnd относиться. Ну а когда приходит какое нить сообщение на ссылку - вычисляем к какой ссылке относиться hwnd


Ну, в принципе, с таким подходом к реализации такой панели я согласен!
Будем дерзать!

251
23 ноября 2007 года
SkyMаn
1.7K / / 31.07.2007
А разве обязатательно юзать апишки? ИМХО, можно обойтись и без них.
Тут - исходник примера+EXEшник, где видно, как это можно сделать на вижуал бейсике, думаю, в нем разберетесь.

На рисунке - результат деяния программулины.
397
24 ноября 2007 года
SergPas
527 / / 03.02.2007
Эффект, конечно, потрясающий. Но и его можно было бы улучшить! Только вот одна проблема, Visual Basic я не знаю...
251
24 ноября 2007 года
SkyMаn
1.7K / / 31.07.2007
Цитата: SergPas
Эффект, конечно, потрясающий. Но и его можно было бы улучшить! Только вот одна проблема, Visual Basic я не знаю...


Можно улучшать сколько фантазии хватит, я лишь показал пример.
Если не знаете ВБ, то пишите не тот, что знаете. Понять ВБ знающему другой язык, имхо, легко:) - все логически-интуитивно понятно.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог