如何显示'通过另一个应用程序的应用程序(visual c ++)

时间:2015-09-30 03:47:34

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

我不知道标题是否对你们有任何意义,而且我对英语不是很好,所以我会通过图像解释我的问题(我没有足够的代表很抱歉...

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

enter image description here

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

enter image description here

我听起来像一个总菜鸟......但这可能吗?如果是的话,我怎么能实现这个目标呢?

两者都是用C ++编写的

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这是一个复杂的问题,可以在合理的空间内完全回答。所以我可以先提供,保证已经这样做,第二,大致如何进行。

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

所以 - 要做到这一点,你需要做3件事

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

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

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