c++ - 如何通过另一个应用程序 'show' 一个应用程序 (visual c++)

标签 c++ visual-c++ cocos2d-x

我不知道这个标题对你们有没有意义,我的英语不是很好所以我会通过图片来解释我的问题(我没有足够的代表很抱歉)

所以在我的解决方案中我有 2 个项目:

enter image description here

我想做的是通过第一个“展示”我的第二个,就像这样:

enter image description here

我听起来像个菜鸟……但这可能吗?如果是,我该如何实现?

都是用C++写的

感谢您的帮助。

最佳答案

这是一个需要在合理篇幅内完整回答的复杂问题。所以我可以首先提供,保证这样做是可能的,其次,提供如何进行的大致轮廓。

根据您所需的集成级别,基本上有两种可能的方法: Windows 屏幕保护程序是独立的 exe 文件。尽管如此,它们仍可以将自己渲染到 Windows 的“预览”对话框中。 这是通过预览对话框启动的 screensaver.exe 实现的 - 它在命令行上传递其 HWND。

所以 - 为此,您需要做 3 件事

  • 说服您的托管应用程序 (CocosHelper) 为您提供表单的 HWND,并使用包含该编号的命令行启动您的 cocos 应用程序。
  • 在您的 cocos 项目中,您将转到您的 AppDelegate applicationDidFinishLaunching 实现,并从命令行检索 hwnd。
  • 您将创建窗口 GLViewImpl 类的子类,它会在创建 OpenGL View 时将其父级设置为提供的窗口 - 您的 applicationDidFinishLaunching 方法将创建此子类 GLViewImpl 而不是基本的 cocos 版本。

下一个方法以此为基础,将 cocos 项目放入与宿主应用程序相同的进程空间 - 假设宿主应用程序是 win32 桌面应用程序。

  • 创建第三个“CocosDllProject”作为“CocosProject”项目的克隆。将其更改为“动态库”而不是“应用程序”并删除“main.cpp”文件。
  • 添加一个新的“CocosDllMain.cpp”文件并向其添加一个入口函数。 “RunCocos”之类的。确保此方法是从 dll 中导出的,并且它将具有先前“main”方法的内容,但它应该将 HWND 参数作为参数传递给(修改后的)AppDelegate。这将是父窗口。
  • 将此dll作为依赖添加到其他项目中,并在适当的时候调用“RunCocos”。

关于c++ - 如何通过另一个应用程序 'show' 一个应用程序 (visual c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32857446/

相关文章:

c++ - C++ 标准库中的 boost::optional 替代方案

c++ - 如何以正确的方式从容器中删除 QSharedPointer

c++ - 在 ifstream 中使用运算符 '>>' 的编译器错误

cocos2d-x-3.0 绘制与 onDraw

ios - Sprite 完成 Action 时调用带有 3 个参数的函数

c++ - 如何将我的 AppDelegate 定义为它实例化的类的实例变量?

c++ - 错误 C2893 : Failed to specialize function template VC++ 2012

C++ 构造函数和计算字段

c++ - 临时实例的生命周期是多长?

c++ - 错误 C4430 : missing type specifier/error C2143: syntax error : missing ';' before '*'