Dialog
От: Endymion  
Дата: 18.08.03 10:14
Оценка:
помогите пожалуйста
у меня не получается передать pointer на диалог в другой класс
то есть я хочу , к примеру поменять меню у диалога из другого класса.

вот что я делаю: создаю в диалоге
CDbDlg * dlg = new CDbDlg(this); // то есть поинтер на текущий диалог
и передаю (dlg) в класс.
но когда я пытаюсь сделать что то подобное из класса :
dlg->m_wndMenu.GetSubMenu(0)->EnableMenuItem(ID_OPTIONS_EXIT,
MF_BYCOMMAND | MF_ENABLED );

я получаю сообщения о ошибке

PS
я нечаянно открыл такую же тему в другом разделе — сорри за повтор
Re: Dialog
От: B_A_D Израиль  
Дата: 18.08.03 11:01
Оценка:
Здравствуйте, Endymion, Вы писали:

E>помогите пожалуйста

E>у меня не получается передать pointer на диалог в другой класс
E>то есть я хочу , к примеру поменять меню у диалога из другого класса.

E>вот что я делаю: создаю в диалоге

E>CDbDlg * dlg = new CDbDlg(this); // то есть поинтер на текущий диалог
E>и передаю (dlg) в класс.
E>но когда я пытаюсь сделать что то подобное из класса :
dlg->>m_wndMenu.GetSubMenu(0)->EnableMenuItem(ID_OPTIONS_EXIT,
E>MF_BYCOMMAND | MF_ENABLED );

E>я получаю сообщения о ошибке


E>PS

E>я нечаянно открыл такую же тему в другом разделе — сорри за повтор


Сам диалог создавать пробовал ? Ты создал только экземпляр объекта:

 CDbDlg * dlg = new CDbDlg(this); // то есть поинтер на текущий диалог
 dlg->Create(IDC_YOUR_DLG_TEMPLATE,this); // Это обязательно !!!!!!!!!!!!!!
Re[2]: Dialog
От: Endymion  
Дата: 18.08.03 17:59
Оценка:
Здравствуйте, B_A_D, Вы писали:

B_A>Здравствуйте, Endymion, Вы писали:


E>>помогите пожалуйста

E>>у меня не получается передать pointer на диалог в другой класс
E>>то есть я хочу , к примеру поменять меню у диалога из другого класса.

E>>вот что я делаю: создаю в диалоге

E>>CDbDlg * dlg = new CDbDlg(this); // то есть поинтер на текущий диалог
E>>и передаю (dlg) в класс.
E>>но когда я пытаюсь сделать что то подобное из класса :
dlg->>>m_wndMenu.GetSubMenu(0)->EnableMenuItem(ID_OPTIONS_EXIT,
E>>MF_BYCOMMAND | MF_ENABLED );

E>>я получаю сообщения о ошибке


E>>PS

E>>я нечаянно открыл такую же тему в другом разделе — сорри за повтор


B_A>Сам диалог создавать пробовал ? Ты создал только экземпляр объекта:


B_A>
B_A> CDbDlg * dlg = new CDbDlg(this); // то есть поинтер на текущий диалог
B_A> dlg->Create(IDC_YOUR_DLG_TEMPLATE,this); // Это обязательно !!!!!!!!!!!!!!
B_A>


эта функция создаст ещё один такой же диалог , но я хочу совсем не это.
Я хочу что бы когда одно моё диалоговое окно уже открыто, передать поинтер на него в класс (не этого диалога ) и что бы этот класс мог бы изменить меню диалога и управлять им
Re[3]: Dialog
От: B_A_D Израиль  
Дата: 18.08.03 18:23
Оценка:
Здравствуйте, Endymion, Вы писали:

B_A>>
B_A>> CDbDlg * dlg = new CDbDlg(this); // то есть поинтер на текущий диалог
B_A>> dlg->Create(IDC_YOUR_DLG_TEMPLATE,this); // Это обязательно !!!!!!!!!!!!!!
B_A>>


E>эта функция создаст ещё один такой же диалог , но я хочу совсем не это.

E>Я хочу что бы когда одно моё диалоговое окно уже открыто, передать поинтер на него в класс (не этого диалога ) и что бы этот класс мог бы изменить меню диалога и управлять им


Тогда желательно привести бы исходники этого класса диалога(по крайней мере то, что относится к его созданию).
Re[4]: Dialog
От: Endymion  
Дата: 18.08.03 19:33
Оценка:
B_A>Тогда желательно привести бы исходники этого класса диалога(по крайней мере то, что относится к его созданию).




ты хочешь посмотреть как я создал этот диалог ? я просто открыл приложение MFC и создал приложение с одиночным диалогом. потом я добавил туда диалоги, но главное приложение я сам не создаю, и если честно я не знаю как оно создаётся, потому что никаких команд create я не вижу
кстати я сейчас попробовал сделать в самом диалоге
CDbDlg * dlg = new CDbDlg(this);
dlg -> m_wndMenu. GetSubMenu(0) ->EnableMenuItem(ID_OPTIONS_EXIT,
MF_BYCOMMAND | MF_ENABLED );
и получил всё тоже сообщение о ошибке

как же обращаться к диалоговому окну ? и как открыть именно тот диалог, которой я хочу открыть ?
Re: Dialog
От: Ярослав Александрович Литва  
Дата: 19.08.03 05:12
Оценка:
Здравствуйте, Endymion, Вы писали:

E>CDbDlg * dlg = new CDbDlg(this); // то есть поинтер на текущий диалог


Эта строчка создает копию диалога, правильно так:

CDbDlg * dlg = this;


Можно и не создавать пойнтер dlg, а прямо в нужном месте передавать this.
Re[5]: Dialog
От: B_A_D Израиль  
Дата: 19.08.03 07:32
Оценка:
Здравствуйте, Endymion, Вы писали:

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





E>ты хочешь посмотреть как я создал этот диалог ? я просто открыл приложение MFC и создал приложение с одиночным диалогом. потом я добавил туда диалоги, но главное приложение я сам не создаю, и если честно я не знаю как оно создаётся, потому что никаких команд create я не вижу

E>кстати я сейчас попробовал сделать в самом диалоге
E>CDbDlg * dlg = new CDbDlg(this);
E>dlg -> m_wndMenu. GetSubMenu(0) ->EnableMenuItem(ID_OPTIONS_EXIT,
E> MF_BYCOMMAND | MF_ENABLED );
E>и получил всё тоже сообщение о ошибке

E>как же обращаться к диалоговому окну ? и как открыть именно тот диалог, которой я хочу открыть ?



Значит ты создал Dialog-based application
в методе InitInstance класса CWinApp твоего приложения должен быть такой код создания
главного окна твоего приложения:

        CDbDlg dlg;
    m_pMainWnd = &dlg;
    int nResponse = dlg.DoModal();//здесь создается диалог !!!!!!!!!!!!! 
    if (nResponse == IDOK)
    {
        // TODO: Place code here to handle when the dialog is
        //  dismissed with OK
    }
    else if (nResponse == IDCANCEL)
    {
        // TODO: Place code here to handle when the dialog is
        //  dismissed with Cancel
    }


то есть тебе не надо его уже создавать , он уже существует, поэтому находясь в этом диалоге
можно сослаться на самого себя черех this.
Re[2]: Dialog
От: Endymion  
Дата: 19.08.03 13:58
Оценка:
спасибо большое действительно, всё работает.
а сам я что то не догадался
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.