Диалог в Диалоге
От: yndtrud  
Дата: 05.03.08 06:36
Оценка:
Исправлено форматирование текста. — SchweinDeBurg

День добрый.

Господа не подскажите как реализивоать то что мне нужно.
А нужно:

Есть класс CDialogA наследник CDialog.
IDD в нем например IDD_A_DIALOG (лежит в ресурсах)
есть некотрые переменные — члены класса. DDX к ним.
и одна важная m_uiTemplate по умолчанию у становленная в ноль

в программе делаем

CDialogA dlgA;
dlgA.DoModal();

Все прекрассно, все работает.

Теперь проблемка:

Есть класс CDialogB наследник CDialogA
IDD в нем неважен.
В конструкторе с CDialogB я устанавливаю m_uiTemplate (из родительского класса CDialogA) в IDD_B_DIALOG.
IDD_B_DIALOG есть в ресурсах (стиль окна CHILD, CONTROL, CLIPSIBLINGS).
Так же в CDialogB есть свои переменные и они связанны DDXом.

Задача.

Надо вставить CDialogB в CDialogA. Допустим в центр окна (для простоты примера).
Тоесть CDialogA создается со своим шаблоном IDD_A_DIALOG, а в CDialogA::OnInitDialog() создается дочернее окно на основе m_uiTemplate (если она не ноль). В нашем случае равная IDD_B_DIALOG.

Я пытался многими способами сделать это но не вышло

Единственно что-то похожее на правду получилась при

class CDialogA::public CDialog{
....
...

CDialog m_pChildDlg;
}

CDialogA::OnInitDialog(){

CDialog::OnInitDialog()

if(uiTemplate){
  m_pChildDlg.Create(uiTemplate, this);
  m_pChildDlg.ShowWindow(SW_SHOW);
}

.......................
}

Но при таком способе сообщения от контролов (IDD_B_DIALOG) не доходят до DDX от CDialogB. Естественно.

Вопрос: каким же образом мне заставить сообщения обрабатываться

Мне кажется что я не знаю техники реализации таких окон. Может подскажите? Или ссылку какую кините.

Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.