дочернее диалоговое окно внутри диалогового окна

Я хочу создать 2 диалоговых окна, одно из которых является дочерним для другого. Ниже приведена часть кода.
Когда я щелкаю пункт меню «Родитель», он создает диалоговое окно 2 и устанавливает один из них как дочерний для другого, как показано на рисунке:

введите описание изображения здесь

Проблема в том, что они оба невидимы. Они были размером, как указано Spy ++.
Даже если я использую ShowWindow и UpdateWindow, это не помогает.

Вот мой первый квестон:

How to fix this?

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

введите описание изображения здесь

у него есть диалог предпочтений, который содержит дочерние диалоги (ограниченный прямоугольник черной линией). Эти дочерние диалоговые окна используются для группировки связанных параметров. Поэтому, если пользователь выбирает элемент в левой части TreeView, он скрывает дочернее диалоговое окно и отображает другое дочернее диалоговое окно, чтобы предоставить различные параметры.

Теперь второй вопрос:

Is my code is the correct way to achieve such work?


Обновление 2:

Вот решение!

http://msdn.microsoft.com/en-us/library/windows/desktop/ms644996%28v=vs.85%29.aspx


Обновить:

Спасибо вам, ребята.

После использования CreateDialog (для дочернего диалога) вместо DialogBox(...), с помощью DS_CONTROL вместо WS_CHILDи удалить OK Кнопка (и соответствующий ей wndproc) из дочернего диалога, я получил

введите описание изображения здесь

Я даже могу переместить дочерний диалог внутри родительского диалога. Удалить CAPTION "Child Dialog" в файле скрипта ресурса не помогает.

  1. Как (какие флаги следует использовать), чтобы дочерний диалог легко помещался в родительский диалог? Это означает, что: без заголовка, без рамки … и т. Д. (Использование SetWindowLong а также WS_BORDER после создания дочернего диалога? Или что-то конкретное для диалога?)

  2. Кнопка ОК родительского диалога больше не работает. Как это исправить? Я не понимаю, как управлять процедурами диалога в этом случае родитель-потомок. Любая ссылка на это?


Вот мой код:

1. Message handler for dialogs:

INT_PTR CALLBACK Child(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
{
hChild = hDlg;
return (INT_PTR)TRUE;
}
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}

INT_PTR CALLBACK Parent(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
{
hParent = hDlg;
DialogBox(hInst, MAKEINTRESOURCE(IDD_CHILD), hParent, Child);
SetParent(hChild, hParent);
return (INT_PTR)TRUE;
}
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}

2. Dialog Templates in resource file

IDD_CHILD DIALOGEX 0, 0, 70, 50STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU
CAPTION "Child Dialog"FONT 8, "MS Shell Dlg"BEGIN
LTEXT           "Child Dialog",IDC_STATIC,10,5,35,8,SS_NOPREFIX
DEFPUSHBUTTON   "OK",IDOK,10,25,50,14,WS_GROUP
END

IDD_DIALOG_PARENT DIALOGEX 0, 0, 250, 150
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Parent Dialog"FONT 8, "MS Shell Dlg"BEGIN
LTEXT           "Parent",IDC_STATIC,42 - 20,14,35,8,SS_NOPREFIX
DEFPUSHBUTTON   "OK",IDOK,188, 126,50,14,WS_GROUP
END

1

Решение

Это не совсем правильный подход. Вам нужно установить стиль DS_CONTROL в дочернем диалоге (вместо WS_CHILD). Это говорит диспетчеру окон, что вы создаете диалог как дочернее окно, а не как настоящий всплывающий диалог. Вы также должны использовать CreateDialog или один из его вариантов вместо DialogBox для создания дочернего элемента (согласно комментарию Раймонда).

Больше информации здесь: http://blogs.msdn.com/b/oldnewthing/archive/2004/07/30/201988.aspx

Я не могу действительно помочь вам с первым вопросом. Неясно, что вы делаете неправильно из предоставленных вами фрагментов.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]