| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > GetDlgItem не находит сhild окно |
| Автор: yurec 8.11.2007, 13:37 |
| Привет Создал диалоговое окно в другом окне, вызываю GetDlgItem с ид внутреннего диалога, функция фозвращает 0. Подскажите, в чём проблема, пожалуйста. "Remarks You can use the GetDlgItem function with any parent-child window pair, not just with dialog boxes. As long as the hDlg parameter specifies a parent window and the child window has a unique identifier (as specified by the hMenu parameter in the CreateWindow or CreateWindowEx function that created the child window), GetDlgItem returns a valid handle to the child window. " (msdn ::GetDlgItem) |
| Автор: Andrey44 8.11.2007, 13:49 |
| Покажи код. А когда ты вызываешь GetDlgItem? |
| Автор: yurec 8.11.2007, 14:00 |
| в инитДиалоге вызываю m_dlg_inner.Create(IDD_INNER, this), после етого ( когда уже оба диалоги показались) и вызываю GetDlgItem(IDD_INNER) |
| Автор: Moonlit_angel 10.11.2007, 12:41 |
| http://www.codeproject.com/miscctrl/AAArrayCtrlDemo.asp Тут есть пример, как работать с детскими окнами. Может поможет... У мениа тоже проблема с этим была, мне помогло... |
| Автор: kurlyak 10.11.2007, 19:00 | ||||||||||
Я так понимаю, что у тебя два диалога CMainDlg предположим и второй дилог CDialog. Я не понимаю, зачем тебе вызывать GetDlgItem(IDD_INNER) в первом диалоге, если указатель на это окно, который ты ищешь уже есть в твоей переменной m_dlg_inner. Сделай ее глобальной, то есть так пишешь в файле .h класса CMainDlg:
Потом пишешь в CMainDlg::InitDialog():
, насколько я правильно понял задачу, и потом пользуешься этой переменной dlg (она у тебя m_dlg_inner) в этом классе как хочешь и где угодно. А вобще есть функция такая, которую используют в главном классе:
Она возвращает все дочерние окна твоего класса CMainDlg в z-поряке. В приведенном примере функция возвращает значение CWnd*, если тебе надо получить HWND то пользуйся ::GetWindow().
Но вобще ты не рассказал, что ты будет потом делать с дочерним окном, может можно было сделать все проще. Если не в падло, расскажи по- подробнее, кали не получиться. Добавлено через 8 минут и 19 секунд Вобще я там неточность допустил, вроде так надо:
Код откомпилируеться, но тебе нужно реальный класс твоего второго диалога указать вместо CDialog. Попробуй... |
| Автор: kurlyak 10.11.2007, 19:30 | ||||||
А вобще замечу что в мсдн написано так как ты говорил:
Но заметь что я выделил "в диалоговом окне", то есть твое диалоговое окно- второе, оно вне твоего первого диалога. Значит тебе нужно делать твою переменную m_dlg_inner только глобальной в классе так:
либо так, скорее всего:
|