Поиск:

Ответ в темуСоздание новой темы Создание опроса
> диалоговые окна, проблема 
V
    Опции темы
Aline
Дата 30.1.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мне дали проект, который надо доработать (MFC). В нём после запуска программы сразу открывается диалоговое окно. Мне в программу надо добавить ещё один диалог, который теперь должен открываться первым, а тот который был, должен вызываться из нового нажатием на кнопку. Я так понимаю, что предыдущий проект был создан при помощи Wizard как Dialog (MFC). 
Вопрос в том, как теперь мне поменять местами диалоги, так чтобы новый диалог запускался первым? 

Насколько я поняла из проекта, строки:

Код

BOOL CPilotFrameCutterApp::InitInstance()
{
--------------------------------------------------
    CPilotFrameCutterDlg dlg;
    m_pMainWnd = &dlg;
    INT_PTR nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
    }
    else if (nResponse == IDCANCEL)
    {
    }

    return FALSE;
}



и позволяют сразу запустить диалог.


Я создала новый диалог, добавила класс и вместо 

Код

CPilotFrameCutterDlg dlg;


Написала класс нового диалога.

Но при запуске ничего не появляется и как оказалось DoModal возвращает -1.

Что делать?

PM MAIL   Вверх
voov
Дата 30.1.2009, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



Возможно чтото со стилями нового диалога. Попробуй создавать новый диалог копированием старого диалог в редакторе ресурсов. И зайди отладчиком внутрь DoModal(), посмотри че там делается, может это наведет на нужную мысль.
PM MAIL   Вверх
Aline
Дата 30.1.2009, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Зашла в DoModal. В строке:

Код

-----------------------------
TRY
    {
        // create modeless dialog
        AfxHookWindowCreate(this);
        if (CreateDlgIndirect(lpDialogTemplate,
                        CWnd::FromHandle(hWndParent), hInst))
                               --------------------------------------------------------------------------------
    }


результат становится равным -1

Это может быть из-за того, что нет Parent? 
hWndParent = 0
И что делать?



Зашла в DoModal когда вызывается первый диалог. Оказывается там Parent тоже был равен 0, но там установлены какие то флаги и поэтому окно открывается, т.е. в той же строке 

Код

-----------------------------
TRY
    {
        // create modeless dialog
        AfxHookWindowCreate(this);
        if (CreateDlgIndirect(lpDialogTemplate,
                        CWnd::FromHandle(hWndParent), hInst))
                               --------------------------------------------------------------------------------
    }


он проходит  дальше и обрабатывается:
Код

if (m_nFlags & WF_CONTINUEMODAL)
            {
                // enter modal loop
                DWORD dwFlags = MLF_SHOWONIDLE;
                if (GetStyle() & DS_NOIDLEMSG)
                    dwFlags |= MLF_NOIDLEMSG;
                VERIFY(RunModalLoop(dwFlags) == m_nModalResult);
            }


т.е. выполняется условие,попадает внутрь условия и там уже вызывается окно... Как эти флаги установить то теперь?

Это сообщение отредактировал(а) Aline - 30.1.2009, 16:48
PM MAIL   Вверх
Aline
Дата 30.1.2009, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Копирование предыдущего диалога тоже не помогло...
PM MAIL   Вверх
voov
Дата 30.1.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


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

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



Проверил. Все прекрасно подменяется. Сравни свойства диалогов, гдето должо отличаться.
PM MAIL   Вверх
Earnest
Дата 30.1.2009, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Я правильно поняла, что у тебя CreateDlgIndirect false возвращает?
Может, у тебя в новом диалоге используются Common Controls?а инициализировать их ты забыла?


--------------------
...
PM   Вверх
Aline
Дата 2.2.2009, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



voov, я просмотрела все свойства, вроде всё совпадает. Я правильно делаю, что свойства диалога смотрю?


Earnest, что за Common Controls?
PM MAIL   Вверх
Aline
Дата 2.2.2009, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня используется RichEdit, а для него оказывается надо запустить AfxInitRichEdit() перед открытием окна....
PM MAIL   Вверх
Earnest
Дата 2.2.2009, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



RichEdit - один из Common Controls, но стоит немного особняком - его нужно инициализировать с помощью AfxIninRichEdit, а прочие контролы - это деревья (CTreeCtrl), списки (CListCtrl), закладки (CTabCtrl) и т.л. - все, кто посылает родителю WM_NOTIFY. Им надо вызывать InitCommonControls.


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


 




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


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

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