Да, сделать для своих программ такие же окна, как штатные окна Автокада типа перечисленных.
Чтобы положение окон согласовывалось с положением штатных окон Автокада - привязывалось к ним, синхронно менялись размеры смежных окон.
Чтобы были те же возможности с тем же оформлением кнопок и действий на правой кнопке мыши на заголовках окон - сворачивать окна до полосы, включать самосворачиваемость-разворачиваемость, прозрачность и т.п.
Т.е. не писать с нуля самим, а использовать фирменные шаблоны для окон - такие же, как использует сам Автокад.
В общем так:
1. Перечисленные мной классы дают автоматом пустое окно, как диспетчер свойств, и т.п.
2. Само окно имеет такое же поведение, как и диспетчер свойств (растягивается [макс и мин пишется ручками, сразу скажу, MAX тупо не работает
. пишешь обработчик только в надежде на то, что к 2050 автокаду исправят], закрепляется на главном окне акада с тех сторон, какие укажешь при написании кода, или можно вообще отключить залипание; сворачивается, может стать прозрачным, и т.д.)
На этом хорошие новости заканчиваются
Класс CAdUiPaletteSet является контейнером для закладок, т.е. в него можно напихать неограниченное количество своих собственных CAdUiPalette. Если хочется вставить свой CAdUiPalette в окно свойств, то это ооооочень геморройно, т.к. вставлять нужно в ЕГО CAdUiPaletteSet, а не в свой (пытался, получилось, не понравилось, стер исходники и забыл)
Дальше, еще есть трудности (решаемые, но не понятно, зачем их решать, если этим должен заниматься родительский класс, а не мы) в визуальной части, например, скроллинг, цвета, шрифты компонентов окна.
Нарыл свою старую темку, может будет полезно:
http://www.caduser.ru/forum/index.php?PAGE_NAME=message&FID=24&TID=47086&MID=263321#message263321Да, еще одно, окна лучше делать динамическими ( с одной стороны это чуток сложней чем статика, с другой - гараздо легче, т.к. не нужно натягивать окно на CAdUiPalette, можно сразу лепить компоненты на нем.)
Вот в принципе и всё. ах да, еще один важный момент. окно работает в контексте ПРИЛОЖЕНИЯ а не документа, а значит всё что будет обращаться к автокаду может его тупо развалить (блокируй документ перед обращением к акаду). Ну и само окно автоматом не спрячется, если у тебя не будет ни одного документа. Так что или нужно прятать самостоятельно через реакторы, или блокировать работоспособность в этом случае (проверяй наличие активного документа перед началом телодвижений).
Короче говоря, геморроя куча, но будет красиво
. ну например, так:
очень удобно использовать для деления на группы (одна закладка = одна группа). это как раз используется в первой и второй картинке. третья - это окно проекта. при выполнении ряда махинаций добавляется и вторая закладка, совсем с другим содержимым, но не стал уже выкладывать. если в первом и втором случаях мы просто ксерим один и тот же CAdUiPalette наполняя их разными данными, то в третьем случае у нас независимые CAdUiPalette, которые "дружат" через общий CAdUiPaletteSet (увы, прийдется поверить на слово, что их два. лениво делать скриншот)