Приложение MFC с главным окном в виде немодального диалога - PullRequest
1 голос
/ 28 июня 2011

Я разрабатываю приложение MFC и экспортирую его в dll. Приложение имеет только одно окно, и я хочу, чтобы это окно было немодальным. Внутри InitInstance (), если я хочу, чтобы он был модальным, мне нужно только сделать это:

AFX_MANAGE_STATE(AfxGetStaticModuleState());
CUIWelcomeDlg dlg;
m_pMainWnd = &dlg;
INT_PTR 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
}
return false;

Работает просто модально. Вот код для немодального:

AFX_MANAGE_STATE(AfxGetStaticModuleState());
CUIWelcomeDlg * dlg;
dlg=new CUIWelcomeDlg();
m_pMainWnd=dlg;
if(dlg!=NULL) {
    dlg->Create(IDD_UIWELCOME_DIALOG,NULL);
    dlg->ShowWindow(SW_SHOW);
} 
return true;

Я пытался его отладить. Это хорошо, пока не достигнет возврата истины; После этого диалоговое окно зависает и не отвечает. Кто-нибудь знает как это исправить?

Ответы [ 2 ]

0 голосов
/ 28 июня 2011

Вам нужно реализовать свой собственный бесконечный цикл.Конечно, вы не хотите, чтобы поток пользовательского интерфейса реагировал, поэтому вам нужно перехватывать и отправлять сообщения внутри этого цикла.Попробуйте добавить это после ShowWindow:

MSG msg;

// Handle dialog messages
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
    if(!IsDialogMessage(&msg))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);  
    }
}
0 голосов
/ 28 июня 2011

Попробуйте удалить следующую строку:
m_pMainWnd = dlg;

(если dlg здесь указатель, вы должны назвать его pdlg).

...