15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Добавляем 'дочерние' диалоги в основной диалог


Автор: Martin Randall.

Компилятор: VC6, VC5

Как-то раз возникла необходимость во время выполнения программы изменять содержимое диалогового окна. Так же было необходимо, чтобы все изменяемые элементы были бы как будто частью этого окна.

Решение получилось в виде кода, который читает файл ресурса с шаблоном "дочернего" диалога и добавляет эелементы управления из шаблона в родительский диалог.

Итак, как это работает. Наследуйте родительский диалог от класса CMultiDialog и вызовите функцию AddDialog для добавления дочернего диалога. Первый параметр этой функции - это ID шаблона дочернего диалога, а второй - это ID маркера контрола (обычно static control), который размечает положение дочернего контрола. Данный маркер будет скрыт после того, как дочерний контрол будет добавлен.

Добавьте следующие строки в функцию OnInitDialog родительского диалога.

   // Добавление диалога
   AddDialog( IDD_DIALOG1, IDC_MARKER );

Работаем с элементами управления в диалоге как с обычными диалоговыми контролами:

   m_pListBox = (CListBox*) GetDlgItem( IDC_LIST1 );
   if ( m_pListBox ) {
      m_pListBox->AddString( "First" );
      m_pListBox->AddString( "Second" );
      m_pListBox->AddString( "Third" );
   }

Downloads

Скачать демонстрационный проект - 33 Kb
Скачать исходник - 3 Kb