0

我制作了一个带有打开非模式窗口的函数的 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()from theApp 不起作用,因为文档的框架窗口属于不同的线程。

4

0 回答 0