Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GetDlgItem не находит сhild окно 
:(
    Опции темы
yurec
Дата 8.11.2007, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



Привет

Создал диалоговое окно в другом окне, вызываю 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)
PM MAIL   Вверх
Andrey44
Дата 8.11.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Покажи код.
А когда ты вызываешь GetDlgItem?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
yurec
Дата 8.11.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



в инитДиалоге вызываю m_dlg_inner.Create(IDD_INNER, this), после етого ( когда уже оба диалоги показались) и вызываю GetDlgItem(IDD_INNER)
PM MAIL   Вверх
Moonlit_angel
Дата 10.11.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.9.2007
Где: Вильнюс, Литва

Репутация: нет
Всего: нет



 work with child window
Тут есть пример, как работать с детскими окнами. Может поможет... У мениа тоже проблема с этим была, мне помогло...
PM MAIL Skype   Вверх
kurlyak
Дата 10.11.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 7.11.2007

Репутация: 1
Всего: 3



Я так понимаю, что у тебя два диалога CMainDlg предположим и второй дилог CDialog. Я не понимаю, зачем тебе вызывать GetDlgItem(IDD_INNER) в первом диалоге, если указатель на это окно, который ты ищешь уже есть в твоей переменной m_dlg_inner. Сделай ее глобальной, то есть так пишешь в файле .h класса CMainDlg:

Код

public:
    CDialog *dlg;


Потом пишешь в CMainDlg::InitDialog():

Код

         dlg=new CDialog();
    dlg->Create(IDD_DIALOG1, this);
    dlg->ShowWindow(SW_SHOW);


, насколько я правильно понял задачу, и потом пользуешься этой переменной dlg (она у тебя m_dlg_inner) в этом классе как хочешь и где угодно.

А вобще есть функция такая, которую используют в главном классе:
Код

CMainDlg *mydlg=(CMainDlg *) GetWindow(GW_CHILD);


Она возвращает все дочерние окна твоего класса CMainDlg в z-поряке. В приведенном примере функция возвращает значение CWnd*, если тебе надо получить HWND то пользуйся ::GetWindow().
Код

::GetWindow(AfxGetApp()->m_pMainWnd->m_hWnd, GW_CHILD);


Но вобще ты не рассказал, что ты будет потом делать с дочерним окном, может можно было сделать все проще. Если не в падло, расскажи по- подробнее, кали не получиться.

Добавлено через 8 минут и 19 секунд
Вобще я там неточность допустил, вроде так надо:
Код

CDialog *mydlg=(CDialog *) GetWindow(GW_CHILD);


Код откомпилируеться, но тебе нужно реальный класс твоего второго диалога указать вместо CDialog. Попробуй...
PM MAIL   Вверх
kurlyak
Дата 10.11.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 7.11.2007

Репутация: 1
Всего: 3



А вобще замечу что в мсдн написано так как ты говорил:
Цитата

CWnd::GetDlgItem
This method retrieves a pointer to the specified control or child window in a dialog box or other window. The pointer returned is usually cast to the type of control identified by nID. 

Но заметь что я выделил "в диалоговом окне", то есть твое диалоговое окно- второе, оно вне твоего первого диалога. Значит тебе нужно делать твою переменную m_dlg_inner только глобальной в классе так:

Код

CDialog *m_dlg_inner;

либо так, скорее всего:
Код

CMySecondDlg *m_dlg_inner;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0999 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.