Vc++6.0:mfc: немодальный диалог

Тема в разделе "MS Visual C++", создана пользователем ezus, 30 окт 2008.

  1. ezus

    ezus Member

    Регистрация:
    30 окт 2008
    Сообщения:
    8
    Симпатии:
    0
    Точнее оно выводится, но только по окончанию активности процесса, т.е. перед переходом к ожиданию действий пользователя.

    Наверняка какая-то чушь с моей стороны, но найти не могу.

    Вроде все сделал:

    class ZsUtWaitWin : public CDialog

    .....
    _cwin = new ZsUtWaitWin();
    _cwin->Create(IDD_ZSUT_WAIT_WIN,NULL);
    .....
    _cwin->SetWindowPos( NULL, dltX, dltY, 0, 0, SWP_NOSIZE );
    _cwin->ShowWindow(SW_SHOW);

    .....
    BOOL ZsUtWaitWin::OnInitDialog()
    {
    CDialog::OnInitDialog();

    m_anim.Open( "process.avi" );
    m_mod = "";
    m_obj = "";
    m_oper = "";

    UpdateData(FALSE);

    return TRUE;
    }


    Может кто-нибуть что-нибуть увидит.

    Спасибо.
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Модальный диалог создается при помощи DoModal
     
  3. Dimmuborgir

    Dimmuborgir Гость

    Код (Text):
    _cwin = new ZsUtWaitWin();
    _cwin->Create(IDD_ZSUT_WAIT_WIN,NULL);
    .....
    _cwin->SetWindowPos( NULL, dltX, dltY, 0, 0, SWP_NOSIZE );
    _cwin->ShowWindow(SW_SHOW);
    это где происходит? поподробнее
     
  4. ezus

    ezus Member

    Регистрация:
    30 окт 2008
    Сообщения:
    8
    Симпатии:
    0
    В том и дело, что мне нужен НЕмодальный режим, чтобы параллельно с вычислениями показывать динамически промежуточные значения


    Есть два класса:

    class ZsUtWaitWin : public CDialog - окно диалога
    и
    class ZsUtWait - интерфейсная оболочка к ZsUtWaitWin


    ZsUtWait содержит
    private:
    ZsUtWaitWin* _cwin;


    Функциональность:
    /////////////////////////////
    void ZsUtWait::init()
    {
    _cwin = new ZsUtWaitWin();
    _cwin->Create(IDD_ZSUT_WAIT_WIN,NULL);

    //// Posision
    CRect rectW, rectD; ///,Rect2;

    CRamcwApp *FApp = (CRamcwApp *) AfxGetApp();
    CMainFrame *FMFrame = (CMainFrame *) FApp->m_pMainWnd;

    FMFrame->GetWindowRect(&rectW);
    _cwin->GetWindowRect(&rectD);

    int dltX = rectW.Width()/2 - rectD.Width()/2;
    int dltY = rectW.Height()/2 - rectD.Height()/2;

    _cwin->SetWindowPos( NULL, dltX, dltY, 0, 0, SWP_NOSIZE );
    //_cwin->ShowWindow(SW_NORMAL);
    _cwin->ShowWindow(SW_SHOWNORMAL);

    }

    /////////////////////////////
    BOOL ZsUtWaitWin::OnInitDialog()
    {
    CDialog::OnInitDialog();
    // Add extra initialization here

    m_anim.Open( "process.avi" ); // CAnimateCtrl m_anim;

    m_mod = ""; // CString m_mod;
    m_obj = ""; // CString m_obj;
    m_oper = ""; // CString m_oper;

    UpdateData(FALSE);

    return TRUE; // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX Property Pages should return FALSE
    }

    /////////////////////////////
    void ZsUtWaitWin::show( CString t2, CString t3 )
    {
    m_obj = t2;
    m_oper = t3;
    UpdateData(FALSE);
    ShowWindow(SW_SHOW);
    }








    Похоже я понял в чем дело, но не знаю пока как с этим бороться.

    Рисование самого фрейма происходит в основном потоке управления - поэтому я виже пустое окно.
    А вывод элементов окна выполняется отдельным сообщением к новому окну, и это сообщение лежит в очереди сообщений в ожидании окончания обработки предыдущих, т.е. получается - до окончания расчетов.

    Вопрос?
    Как мне заставить систему обработать сообщения к диалоговому окну немедленно, а потом продолдить вычисления?
     
  5. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Ну вообщем-то можно вызвать нечто вроде
    Код (Text):
    BOOL ProcessMsgs()
    {
    MSG msg;
    CWinApp* pApp=AfxGetApp();
    while ( ::PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )
    {
    if ( !pApp->PumpMessage( ) )
    {
    ::PostQuitMessage(0);
    return FALSE;
    }
    }
    return TRUE;
    }
    Но правильней будет обратить свой взор на потоки.
     
Загрузка...
Похожие Темы - Vc++6 mfc немодальный
  1. PetrovVA
    Ответов:
    3
    Просмотров:
    1.717
  2. harimambura
    Ответов:
    0
    Просмотров:
    1.301
  3. Antonim
    Ответов:
    1
    Просмотров:
    1.236
  4. Antonim
    Ответов:
    4
    Просмотров:
    1.811
  5. borpavlenko
    Ответов:
    6
    Просмотров:
    5.306

Поделиться этой страницей