Элемент управления
[ATTACH]2398[/ATTACH]
Даже если самому реализовывать, то можно столкнуться с проблемами организации такого окна.
Так, например, вы в качестве "холста" выбираете предопределённое окно "STATIC". Затем создаёте контекст устройства в памяти, там рисуете, а потом копируете этот контекст в контекст "STATIC". А как же обработка? Уж не хотите ли вы создавать и обрабатывать сообщения, поступаемые от нарисованных вами в контексте изображений? По сути, дочерними элементами такой панели будут элементы управления типа "STATIC", являющиеся ссылками, заменяющими, скажем, меню программы. Реализовать анимацию окон в Windows проще паренной репы; здесь достаточно использовать пару функций - AnimateWindow и SetLayeredWindowAttributes. В принципе самому создать такую панель не сложно; просто я думал, что есть такой элемент управления в Windows (может быть он и существует).
А вот для получения сообщений от кнопок и различных ссылок на твоей панели есть два возможных варианта: 1) запоминать положения всех контролов на панели и при получении сообщения от грызуна вычислять над каким контролом мышка и делать соответствующие действия. 2) рисовать каждый елемент на отдельном контроле "STATIC" и принимать сообщения от него.
Если тебе нужена всего одна такая панель (не больше одной панели в программе) и при условии что панель будет с предопределенным количеством вкладок, то тут тебе в помощь "дубовый" код т.е. Пишеш функцию для анимации одной вкладки, потом второй и т.д. и кнопки на них размещаеш в виде отдельных контролов "STATIC" (чтоб легче было) ну а для самих ссылок делаеш функции типа: add_link и delete_link ссылки с их иконками добавляеш га основную форму в виде отдельного того же "STATIC" и храниш в памяти список всех ссылок и к какой ссылке какой hwnd относиться. Ну а когда приходит какое нить сообщение на ссылку - вычисляем к какой ссылке относиться hwnd и... вуаля, короче, все должно получиться.
PS AnimateWindow и SetLayeredWindowAttributes в дочерних окнах, если юзать AlphaBlend, откажуться работать.
PPS хоть бы не забанили за такие мемуары... :)
С другой стороны, такая панелька реализуется, в принципе, легко и просто, если содержимое панелей представлять в виде созданных заранее диалогов с border=none. Всё остальное - дело техники, и особых сложностей вызвать не должно, в особенности, если в приложении использовать архитектуру документ/вид.
AnimateWindow прекрасно работает с анимацией дочерних окон при их скольжении или свёртывании сверху вниз (снизу вверх), как это сделано в панели. Функция AnimateWindow не будет работать в случае эффекта плавного растворения для дочерних окон. Теоретически функция SetLayeredWindowAttributes должна изменять "степень прозрачности" для любых окон. Здесь возникает сложность одновременного использования этих двух эффектов. Хотя и эта проблема разрешима, если код изменения "степени прозрачности" разместить в новом потоке.
Ну, в принципе, с таким подходом к реализации такой панели я согласен!
Будем дерзать!
Тут - исходник примера+EXEшник, где видно, как это можно сделать на вижуал бейсике, думаю, в нем разберетесь.
На рисунке - результат деяния программулины.
Можно улучшать сколько фантазии хватит, я лишь показал пример.
Если не знаете ВБ, то пишите не тот, что знаете. Понять ВБ знающему другой язык, имхо, легко:) - все логически-интуитивно понятно.