У меня проблема в следующем:
Есть приложение написанное на чистом WinAPI.
В нем нужно вызвать диалог из DLL.
DLL написана с использованием MFC и сам обработчик диалога тоже в ней.
Из DLL экспортируется функция:
__declspec( dllexport ) int ShowConfigDialog(const HWND pWndParent)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
HINSTANCE hOld = AfxGetResourceHandle();
AfxSetResourceHandle(theApp.m_hInstance);
CConfigDlg dlg();
int iRes = dlg.DoModal();
AfxSetResourceHandle(hOld);
return iRes;
}
Проблема в том, что при вызове функции теряется фокус и исчезает окно из списка приложений, при этом диалоговое окно показыватся, но к нему невозможно получить доступ! Если код функции заменить на:
__declspec( dllexport ) int ShowConfigDialog(const HWND pWndParent)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
AfxMessageBox("Hello word");
return 0;
}
То здесь все нормально — и фокус есть и кнопка "ОК" нажимается!
Например, для вызова диалога, реализованного в самом приложении WinAPI происходит вызовом:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
Что то я совсем запутался