非モーダルウィンドウを開く関数を使用してDLLを作成しました。
class CMainFrame : public CFrameWnd
{
protected:
CMainFrame() {}
DECLARE_DYNCREATE(CMainFrame)
public:
virtual void PostNcDestroy()
{ AfxPostQuitMessage(0); }
public:
virtual ~CMainFrame() {}
};
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
class CDllApp : public CWinApp
{
public:
CDllApp() :
m_pDocTemplate(NULL)
{};
public:
virtual BOOL InitInstance()
{
CWinApp::InitInstance();
m_pDocTemplate = new CMultiDocTemplate(IDR_MAINFRAME, RUNTIME_CLASS(C3DGraphDoc),
RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(C3DGraphView));
return TRUE;
}
public:
CMultiDocTemplate* m_pDocTemplate;
};
CDllApp theApp;
class C3DThread : public CWinThread
{
DECLARE_DYNCREATE(C3DThread)
public:
virtual BOOL InitInstance()
{
theApp.m_pDocTemplate->OpenDocumentFile(NULL);
}
};
IMPLEMENT_DYNCREATE(C3DThread, CWinThread)
void __stdcall ExportedFunction()
{
AfxBeginThread(RUNTIME_CLASS(C3DThread));
}
メインアプリケーションを終了する前にすべてのウィンドウを閉じると、すべて正常に見えます。そうしないと、スレッドがハングします。ですから、開いているすべてのドキュメントを閉じてクリーンアップする必要があると思います。それを適切に行うための最も簡単な方法は何でしょうか。m_pDocTemplate->CloseAllDocuments()
ドキュメントのフレームウィンドウは異なるスレッドに属しているため、Appからは機能しません。