代码之家  ›  专栏  ›  技术社区  ›  Tim

在Win32 C++命令行应用程序中添加MFC GUI的好方法是什么?

  •  1
  • Tim  · 技术社区  · 15 年前

    我们有一个命令行应用程序,可以从GUI中获益。我们想添加一些绘图功能,并已确定使用MFC的绘图库。最初,我们开发了一个单独的应用程序,但我们更希望在相同的流程空间中使用GUI。

    我想可能是MFC DLL中的GUI,可以托管在生产应用程序和测试应用程序中。

    • 可以在MFC DLL中创建GUI吗?如何实现(以便不同的应用程序可以重用同一个GUI)

    编辑

    我应该补充一点,这是一个非托管应用程序(并且需要保持这种状态-它需要高性能,广泛使用模板、boost、自定义分配器、内部开发的线程序列化等)

    结果:

    Nick D的回答非常有效- especially the follow-up link in his comment with the details about a regular MFC DLL

    注意,我们将在下一次迭代中使用Qt。这次修改我们的构建环境并习惯一个新的框架实在是太多了。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Nick Dandoulakis    15 年前

    您可以在dll中调用/重用GUI代码(我甚至在我的C++项目中使用Delphi表单

    一个非常简单的dll示例:

    // The DLL exports foo() function
    void foo()
    {
        AFX_MANAGE_STATE( AfxGetStaticModuleState() );
    
        CDlgFoo dlg;
        dlg.DoModal();
    }
    

    在控制台程序中,您将有如下代码:

    h = ::LoadLibrary( "my.dll" );
    ::DisableThreadLibraryCalls( h ); 
    pfoo = (foo_type*)::GetProcAddress( h, (const char*)1 );
    if ( pfoo ) pfoo();
    
        2
  •  2
  •   Pavel Radzivilovsky    15 年前

    首先,您必须放弃WinMain()。

    如果仍要保留命令行参数功能,请在应用程序类的InitInstance()中处理命令参数。

        3
  •  1
  •   Idan K    15 年前

    关于DLL,您可以在DLL中编写所有UI功能,并从“生产应用程序”中使用它,其中运行消息循环和WinMain。但这有什么意义呢?如果是出于测试目的,为什么不将表示与逻辑分开,单独测试逻辑呢。您打算如何在测试应用程序中测试UI?模拟按钮点击?