Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Проблема с окнами


Автор: EyeLESS 20.12.2006, 12:31
Народ, у меня в программе два окна, после работы одного,я вызываю второе, но оно не появляется!
Вроде код нормальный, если менять местами диалоги, то будет вызываться то первое, то второе, то есть сами по себе они нормально фурычат, но вот друг за другом - никак! В чем проблема???



Код

BOOL CSockets_ClientApp::InitInstance()
{
    if (!AfxSocketInit())
    {
        AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
        return FALSE;
    }

    AfxEnableControlContainer();

#ifdef _AFXDLL
    Enable3dControls();            
#else
    Enable3dControlsStatic();    
#endif

    CChatDlg dlgChat;
    CSockets_ClientDlg dlg;
    m_pMainWnd = &dlgChat;
    int nResponse = dlgChat.DoModal();
    if (nResponse == IDOK)
    {
        
        dlg.DestroyWindow();
        m_pMainWnd = &dlg;
        nResponse = dlg.DoModal();
        if (nResponse == IDOK)
        {
        }
        else if (nResponse == IDCANCEL)
        {
        }
    }
    else if (nResponse == IDCANCEL)
    {
        
    }

    return FALSE;
}

Автор: Greeen 20.12.2006, 13:26
Наверное ты ошибся здесь
Код
dlg.DestroyWindow();

Поменяй на
Код
dlgChat.DestroyWindow();

Автор: EyeLESS 20.12.2006, 13:40
не...эт я просто туда-сюда гонял то одно окно, то другое, ошибка не здесь! Причем, блин, когда одно окно уничтожается, второе появляется на долю секунды, а потом исчезает!

Автор: Earnest 20.12.2006, 14:55
Тем не менее, это тоже ошибка: ну как может появится окно, которое только что разрушено?
И вообще, не надо вызывать DestroyWindow - после завершения модального цикла окно и так разрушено, без твоего участия.

Автор: EyeLESS 20.12.2006, 14:59
я же еще раз говорю, что просто немного не тот кусок кода, в оригинале этой ошибки нет, просто не глядя копи-пастнул.К тому же дестроится еще не вызванное окно, соответственно, когда оно вызывается , оно уже как новенькое. И еще раз говорю, оно появляется на секунду, но потом исчезает, я не могу понять, в чем проблема=(((

Автор: Earnest 20.12.2006, 15:10
Так покажи реальный код, который есть. 
Возможно, папой у него является бывшее главное окно (предыдущий диалог), вот оно и закрывается, вслед за папой.

Автор: EyeLESS 20.12.2006, 15:13
нашел проблему... все дерьмо было в строчке m_pMainWnd = &dlgChat....правда, я все равно не пойму, почему. smile

Добавлено @ 15:15 
Вот так работает

Код

    CChatDlg dlgChat;
    CSockets_ClientDlg dlg;
    
//    m_pMainWnd = &dlg;
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
        
//        m_pMainWnd = &dlgChat;
        nResponse = dlgChat.DoModal();
        if (nResponse == IDOK)
        {
        }
        else if (nResponse == IDCANCEL)
        {
        }
    }
    else if (nResponse == IDCANCEL)
    {
        
    }


Вот так - нет!!!
Код

    CChatDlg dlgChat;
    CSockets_ClientDlg dlg;
    
    m_pMainWnd = &dlg;
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
        
        m_pMainWnd = &dlgChat;
        nResponse = dlgChat.DoModal();
        if (nResponse == IDOK)
        {
        }
        else if (nResponse == IDCANCEL)
        {
        }
    }
    else if (nResponse == IDCANCEL)
    {
        
    }


Почему так, пока не могу понять.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)