DLL 作为 MDIChild (子窗体)

来源:互联网 发布:surface book mac 编辑:程序博客网 时间:2024/05/22 18:22

原文地址:http://www.ccrun.com/article.asp?d=f36445&i=498


 实际上,调用子窗体的 DLL 时,系统只是检查应用程序的 MainForm 是否为 fsMDIForm 的窗体,这样只

要把调用程序的 Application 的 Handle 传递给 DLL 的 Application 即可;同时退出 DLL 时也要恢复 

Application

// MDIChildPro.cpp // Dll 实现 CPP
#include "unit1.h" // TForm1 定义
TApplication *SaveApp = NULL;
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
    if ( (reason==DLL_PROCESS_DETACH) && SaveApp )
        Application = SaveApp ; // 恢复 Application
    return 1;
}

extern "C" __declspec(dllexport) __stdcall void TestMDIChild(    //1024X768
    TApplication* mainApp,
    LPSTR lpCaption)
{
    if ( NULL == SaveApp ) // 保存 Application,传递 Application
    {
        SaveApp = Application;
        Application = mainApp;
    }
    // lpCaption 为子窗体的 Caption
    TForm1 *Form1 = new TForm1 ( Application, lpCaption ); 
    Form1->Show();
}
注:上面的程序使用 BCB 3.0 编译成功