Мультитабовый диалог с эластиком

Автор Тема: Мультитабовый диалог с эластиком  (Прочитано 3643 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн lom0vАвтор темы

  • ADN OPEN
  • Сообщений: 17
  • Карма: 1
Подскажите как правильно сделать модальный мультитабовый диалог с изменением размеров элементов управления при изменении размера диалогового окна (эластик). Autocad 2015.

Сам мультитаб при изменении размера диалогового окна изменяет размеры правильно.

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Мультитабовый диалог с эластиком
« Ответ #1 : 07-02-2019, 15:20:54 »
lom0v,
Приветствую на форуме!
Для проверки нужен пример кода (полный тестовый проект), так как у меня такого в "запасниках" нет. Если у меня не получится его победить, то отправлю в ADN DevHelp.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн lom0vАвтор темы

  • ADN OPEN
  • Сообщений: 17
  • Карма: 1
Re: Мультитабовый диалог с эластиком
« Ответ #2 : 07-02-2019, 17:36:50 »
Приветствую на форуме!
Спасибо  :)

Для проверки нужен пример кода (полный тестовый проект)
Во вложении тестовый проект.

MS Visual Studio 2017, toolset VC2015.
Проект сделан под Autocad 2017, но обязательно нужна совместимость на уровне исходников с Autocad 2015.
Путь к ObjectARX прописан в файле _props\ACad2015\ObjectARX_common.props как user macros.
Каталоги _props и mtab_elastic должны лежать рядом в одном каталоге.
Все пути для результатов компиляции внутри каталога mtab_elastic.
Команда в Autocad на запуск теста TEST_MTABDIALOG.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Мультитабовый диалог с эластиком
« Ответ #3 : 07-02-2019, 17:49:08 »
Во вложении тестовый проект.
Завтра протестирую.
но обязательно нужна совместимость на уровне исходников с Autocad 2015
Это я гарантировать не могу. Тем более это не сможет гарантировать ADN DevHelp, так как AutoCAD 2015 уже снят с поддержки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение lom0v 08-02-2019, 18:59:42

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

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Re: Мультитабовый диалог с эластиком
« Ответ #4 : 08-02-2019, 12:25:48 »
а если так?
Код - C++ [Выбрать]
  1. //...
  2.         m_tabCtrl.SetActiveTab(0);
  3. //->tab
  4.         DLGCTLINFO      dlgSizeInfo[] = {
  5.                 //{ IDC_BLOCK_GROUP, ELASTICXY, 100 },//<- это зачем?
  6.                 //{ IDC_BLOCK_LIST, ELASTICXY, 100 },//<- это зачем?
  7.                 //{ IDD_TAB1_DIALOG, ELASTICXY, 100 },//<- это зачем?
  8.                 { IDC_TAB1, ELASTICXY, 100 },
  9.                 { IDOK, MOVEXY, 100 },
  10.                 { IDCANCEL, MOVEXY, 100 },
  11.         };
  12.         const DWORD numberofentries = sizeof dlgSizeInfo / sizeof DLGCTLINFO;
  13.         SetControlProperty(dlgSizeInfo, numberofentries);
  14.  
  15. //->Block
  16.         DLGCTLINFO      dlgTAB1SizeInfo[] = {
  17.                 { IDC_BLOCK_GROUP, ELASTICXY, 100 },
  18.                 { IDC_BLOCK_LIST, ELASTICXY, 100 },
  19.         };
  20.         m_pBlockDialog->SetControlProperty(dlgTAB1SizeInfo, sizeof(dlgTAB1SizeInfo) / sizeof(DLGCTLINFO));
  21. //->Object
  22.         DLGCTLINFO      dlgTAB2SizeInfo[] = {
  23.                 { IDC_OBJECT_GROUP, ELASTICXY, 100 },
  24.                 { IDC_OBJECT_LIST, ELASTICXY, 100 },
  25.         };
  26.         m_pObjectDialog->SetControlProperty(dlgTAB2SizeInfo, sizeof(dlgTAB2SizeInfo) / sizeof(DLGCTLINFO));
  27. //->Controls
  28.         DLGCTLINFO      dlgTAB3SizeInfo[] = {
  29.                 { IDC_CONTROLS_LABEL1, ELASTICX, 50 },
  30.                 { IDC_CONTROLS_GROUP, ELASTICXY, 100 },
  31.                 { IDC_COLOR_COMBO, ELASTICX, 50 },
  32.         };
  33.         m_pControlsDialog->SetControlProperty(dlgTAB3SizeInfo, sizeof(dlgTAB3SizeInfo) / sizeof(DLGCTLINFO));
  34.  
  35.  
  36.         return TRUE;
  37.  
1. всё желательно утащить в OnInitDialog главного окна, т.к. иначе работоспособность не гаранирована (естественно затереть в OnInitDialog дочерних окон ненужные огрызки)
2. обрати внимание, что КАЖДАЯ строка структуры DLGCTLINFO должна заканчиваться запятой (даже последняя), иначе не работает.

PS: ну и по поводу гарантии работоспособности... у меня работает начиная с 2010 по текущий автокад (работать должно и в 2009-, но проверить/скомпилить не на чем)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Мультитабовый диалог с эластиком
« Ответ #5 : 08-02-2019, 14:02:25 »
Николай Горлов,
Спасибо за помощь. У меня возникли проблемы с PC, так что сейчас нет возможности разбираться.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн lom0vАвтор темы

  • ADN OPEN
  • Сообщений: 17
  • Карма: 1
Re: Мультитабовый диалог с эластиком
« Ответ #6 : 08-02-2019, 19:13:25 »
Николай Горлов, большое спасибо! Работает. На Autocad 2015 тоже работает.

1. всё желательно утащить в OnInitDialog главного окна, т.к. иначе
А иначе не работает. Вот хрен догадаешься! И в доке ничего не написано. >:(
2. обрати внимание, что КАЖДАЯ строка структуры DLGCTLINFO должна заканчиваться запятой (даже последняя), иначе не работает.
Проверил запятую после последнего члена массива структур. Работает и с запятой, и без.