создание окон для своих программ

Автор Тема: создание окон для своих программ  (Прочитано 18607 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн АлексЮстасуАвтор темы

  • ADN Club
  • ***
  • Сообщений: 123
  • Карма: 0
  • odclass-odedit.com
    • odclass-odedit.com
Как создавать окна для работы своих программ с такими же возможностями, как окно "Свойства" или т.п.? Т.е. согласующееся с другими окнами, с заданием прозрачности, со сворачиваемостью и т.п.?
И чтобы можно было в этом окне делать общее меню (Файл и т.п.)?
« Последнее редактирование: 17-11-2014, 17:10:13 от АлексЮстасу »
я не программист, а технолог. пытаюсь быть постановщиком задач.

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Re: создание окон для своих программ
« Ответ #1 : 17-11-2014, 17:40:42 »
Цитировать
Как создавать окна для работы своих программ с такими же возможностями, как окно "Свойства" или т.п.? Т.е. согласующееся с другими окнами, с заданием прозрачности, со сворачиваемостью и т.п.?
не совсем понял про "согласующееся с другими окнами", но если нужно окно внешне такое как окно свойств или диспетчер слоев, или DesignCenter (команда _adc), то смотри в сторону CAdUiPaletteSet и CAdUiPalette

Цитировать
И чтобы можно было в этом окне делать общее меню (Файл и т.п.)?
да в принципе в нем можно и спутники запускать :), только программить прийдется с нуля и самостоятельно. компонент CMenu динамически созданное никто еще не отменял.

PS: в примерах ObjeectARX, для 2008 автокада был пример палитры (Samples\editor\CustPalette\). с тех пор особо ничего не поменялось.
« Последнее редактирование: 17-11-2014, 17:51:56 от Николай Горлов »

Оффлайн АлексЮстасуАвтор темы

  • ADN Club
  • ***
  • Сообщений: 123
  • Карма: 0
  • odclass-odedit.com
    • odclass-odedit.com
Re: создание окон для своих программ
« Ответ #2 : 18-11-2014, 01:51:18 »
не совсем понял про "согласующееся с другими окнами", но если нужно окно внешне такое как окно свойств или диспетчер слоев, или DesignCenter (команда _adc), то смотри в сторону CAdUiPaletteSet и CAdUiPalette
Да, сделать для своих программ такие же окна, как штатные окна Автокада типа перечисленных.
Чтобы положение окон согласовывалось с положением штатных окон Автокада - привязывалось к ним, синхронно менялись размеры смежных окон.
Чтобы были те же возможности с тем же оформлением кнопок и действий на правой кнопке мыши на заголовках окон - сворачивать окна до полосы, включать самосворачиваемость-разворачиваемость, прозрачность и т.п.
Т.е. не писать с нуля самим, а использовать фирменные шаблоны для окон - такие же, как использует сам Автокад.

(Может быть "согласующиеся" не оч. понятно, если речь о 2008, т.к. эта "согласуемость" появилась с новым интерфейсом с 2010).
« Последнее редактирование: 18-11-2014, 02:02:46 от АлексЮстасу »
я не программист, а технолог. пытаюсь быть постановщиком задач.

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63
Re: создание окон для своих программ
« Ответ #3 : 18-11-2014, 06:48:19 »
Да хоть 2015, не изменилось, что вообще то удиветильно...
Кстати на dotNet'е это тоже легко делается...

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Re: создание окон для своих программ
« Ответ #4 : 18-11-2014, 12:05:36 »
Цитировать
Да, сделать для своих программ такие же окна, как штатные окна Автокада типа перечисленных.
Чтобы положение окон согласовывалось с положением штатных окон Автокада - привязывалось к ним, синхронно менялись размеры смежных окон.
Чтобы были те же возможности с тем же оформлением кнопок и действий на правой кнопке мыши на заголовках окон - сворачивать окна до полосы, включать самосворачиваемость-разворачиваемость, прозрачность и т.п.
Т.е. не писать с нуля самим, а использовать фирменные шаблоны для окон - такие же, как использует сам Автокад.
В общем так:
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 (увы, прийдется поверить на слово, что их два. лениво делать скриншот)
« Последнее редактирование: 18-11-2014, 12:38:20 от Николай Горлов »

Оффлайн АлексЮстасуАвтор темы

  • ADN Club
  • ***
  • Сообщений: 123
  • Карма: 0
  • odclass-odedit.com
    • odclass-odedit.com
Re: создание окон для своих программ
« Ответ #5 : 25-11-2014, 17:12:40 »
Спасибо!
С самими формами окон разобрались.

Еще не понятно, как в этих окнах делать меню типа самых обычных: File, View, Edit и т.п.?

И есть ли фирменные заготовки для квадратных (прямоугольных), а не скругленных, не обведенных цветом кнопок?
« Последнее редактирование: 25-11-2014, 17:42:47 от АлексЮстасу »
я не программист, а технолог. пытаюсь быть постановщиком задач.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: создание окон для своих программ
« Ответ #6 : 25-11-2014, 23:47:04 »
Насколько я помню, надо создавать свои элементы меню и прописывать на них соответствующие обработчики.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Re: создание окон для своих программ
« Ответ #8 : 26-11-2014, 15:11:45 »
Цитировать
Еще не понятно, как в этих окнах делать меню типа самых обычных: File, View, Edit и т.п.?
а то как же. CMenu :). Делаешь динамическое меню, пишешь обработчики на все действия и т.д. и т.п.

Цитировать
И есть ли фирменные заготовки для квадратных (прямоугольных), а не скругленных, не обведенных цветом кнопок?
увы, всё ручками. в любом случае, всё наслование кнопок идет от CButton, a она подстраивается под визуальный стиль windows. так что всё-всё ручками :). и лучше делать качественно, и желательно без использования сторонних библиотек (ну это на свой страх и риск). мало ли, что придумают в новом виндузе (это я про WTL. было, ждали пока пофиксят в библиотеке один момент, потом плюнули и переделали без неё), или вдруг захочется портануть код под макинтош :)
PS: на моей картинке стандартными объектами можно назвать только CStatic и CComboBoxб ну и кнопочки плоские (стандартные акадовские) на последней картинке. Остальное - полет фантазии :)

Оффлайн АлексЮстасуАвтор темы

  • ADN Club
  • ***
  • Сообщений: 123
  • Карма: 0
  • odclass-odedit.com
    • odclass-odedit.com
Re: создание окон для своих программ
« Ответ #9 : 26-07-2016, 18:50:39 »
Я, пардон, в своем духе - вопрос "на пальцах". :)

Программа время от времени падает с фатальной ошибкой. Установили, что связано это с окнами, которые мы сделали а-ля автокадовские (свойств, слоев и пр.).
Есть ли какое-то сакральное знание о подводных камнях с такими окнами? В каком направлении искать или какой костыль ставить, чтобы не падало?
я не программист, а технолог. пытаюсь быть постановщиком задач.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: создание окон для своих программ
« Ответ #10 : 26-07-2016, 19:14:42 »
Есть ли какое-то сакральное знание о подводных камнях с такими окнами?
Есть. Искать ошибки в своих кодах и тщательно отлаживать программу. Ничего другого пока не придумали. Ну и задавать конкретные вопросы...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: создание окон для своих программ
« Ответ #11 : 27-07-2016, 00:31:10 »
Подозреваю, что "вылет" происходит в случае, если в AutoCAD нет ни одного документа - у меня на работе подобное было с палитрами, созданными на .NET (создавал не я, говорю сразу!)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн АлексЮстасуАвтор темы

  • ADN Club
  • ***
  • Сообщений: 123
  • Карма: 0
  • odclass-odedit.com
    • odclass-odedit.com
Re: создание окон для своих программ
« Ответ #12 : 27-07-2016, 01:11:33 »
Есть. Искать ошибки в своих кодах
Я имел в виду недокументированное, неочевидное, неожиданное влияние каких-то параметров, конфликты еще с чем-то или с аналогичным и т.п.
Подозреваю, что "вылет" происходит в случае, если в AutoCAD нет ни одного документа
Вылетало и с документами и без - когда наши окна использовались (а-ля автокадовские). Если делалось без окон одними нашими командами, то не улетало.

Иногда фатальная ошибка появлялась после закрытия Автокада.

Еще часто после закрытия Автокада появляется маленькое пустое автокадовское окно вроде сообщений, в котором ничего не написано, кроме восклицательного знака. Что бы это было, и о чем может говорить?
я не программист, а технолог. пытаюсь быть постановщиком задач.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: создание окон для своих программ
« Ответ #13 : 27-07-2016, 01:27:23 »
Иногда фатальная ошибка появлялась после закрытия Автокада.

Еще часто после закрытия Автокада появляется маленькое пустое автокадовское окно вроде сообщений, в котором ничего не написано, кроме восклицательного знака. Что бы это было, и о чем может говорить?
Порча чужой памяти, непереключение файла ресурсов на AutoCAD, еще тысяча разных причин... Без кодов это гадание на кофейной гуще, что я категорически не приветствую.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн АлексЮстасуАвтор темы

  • ADN Club
  • ***
  • Сообщений: 123
  • Карма: 0
  • odclass-odedit.com
    • odclass-odedit.com
Re: создание окон для своих программ
« Ответ #14 : 27-07-2016, 15:17:03 »
Порча чужой памяти, непереключение файла ресурсов на AutoCAD, еще тысяча разных причин...
Сейчас я о таких "сообщениях", появляющихся часто после закрытия Автокада. Или даже двух таких.


я не программист, а технолог. пытаюсь быть постановщиком задач.