如何 'show' 一个应用程序通过另一个应用程序 (visual c++)
How to 'show' an application through another application (visual c++)
我不知道这个标题对你们有没有意义,我的英语不是很好所以我会通过图片来解释我的问题(我没有足够的代表很抱歉)
所以在我的解决方案中我有 2 个项目:
我想做的是 'show' 我的第二个到第一个,像这样:
我听起来像个菜鸟...但这可能吗?如果是,我该如何实现?
两者都是用 C++ 编写的
感谢您的帮助。
这是一个复杂的问题,要在合理的 space 范围内完全回答。所以我可以首先提供,保证这样做是可能的,其次,提供如何进行的大致轮廓。
根据您所需的集成级别,基本上有两种可能的方法:
Windows 屏保是独立的 exe 文件。尽管如此,他们还是可以将自己呈现给 windows 'preview' 对话框。
这是通过预览对话框启动的 screensaver.exe 实现的 - 它在命令行上传递其 HWND。
所以 - 为此,您需要做 3 件事
- 说服您的托管应用程序 (CocosHelper) 为您提供表单的 HWND,然后使用包含该编号的命令行启动您的 cocos 应用程序。
- 在您的 cocos 项目中,您将转到您的 AppDelegate applicationDidFinishLaunching 实现,并从命令行检索 hwnd。
- 您将创建 windows GLViewImpl class 的子class,这将在创建 OpenGL 视图时将其父级设置为提供的 window -您的 applicationDidFinishLaunching 方法将创建此 subclassed GLViewImpl 而不是基础 cocos 版本。
下一个方法以此为基础将 cocos 项目放入与主机应用程序相同的进程 space - 假设主机应用程序是 win32 桌面应用程序。
- 创建第 3 个 "CocosDllProject" 作为 "CocosProject" 项目的克隆。将其更改为 "Dynamic Library" 而不是 "Application" 并删除 "main.cpp" 文件。
- 添加一个新的 "CocosDllMain.cpp" 文件并向其添加一个入口点函数。 "RunCocos" 之类的。确保此方法是从 dll 导出的,并且它将具有先前 "main" 方法的内容,但它应该将 HWND 参数作为参数传递给(修改后的)AppDelegate。这将是父 window.
- 将此dll添加为其他项目的依赖项,并在适当的时候调用"RunCocos"。
我不知道这个标题对你们有没有意义,我的英语不是很好所以我会通过图片来解释我的问题(我没有足够的代表很抱歉)
所以在我的解决方案中我有 2 个项目:
我想做的是 'show' 我的第二个到第一个,像这样:
我听起来像个菜鸟...但这可能吗?如果是,我该如何实现?
两者都是用 C++ 编写的
感谢您的帮助。
这是一个复杂的问题,要在合理的 space 范围内完全回答。所以我可以首先提供,保证这样做是可能的,其次,提供如何进行的大致轮廓。
根据您所需的集成级别,基本上有两种可能的方法: Windows 屏保是独立的 exe 文件。尽管如此,他们还是可以将自己呈现给 windows 'preview' 对话框。 这是通过预览对话框启动的 screensaver.exe 实现的 - 它在命令行上传递其 HWND。
所以 - 为此,您需要做 3 件事
- 说服您的托管应用程序 (CocosHelper) 为您提供表单的 HWND,然后使用包含该编号的命令行启动您的 cocos 应用程序。
- 在您的 cocos 项目中,您将转到您的 AppDelegate applicationDidFinishLaunching 实现,并从命令行检索 hwnd。
- 您将创建 windows GLViewImpl class 的子class,这将在创建 OpenGL 视图时将其父级设置为提供的 window -您的 applicationDidFinishLaunching 方法将创建此 subclassed GLViewImpl 而不是基础 cocos 版本。
下一个方法以此为基础将 cocos 项目放入与主机应用程序相同的进程 space - 假设主机应用程序是 win32 桌面应用程序。
- 创建第 3 个 "CocosDllProject" 作为 "CocosProject" 项目的克隆。将其更改为 "Dynamic Library" 而不是 "Application" 并删除 "main.cpp" 文件。
- 添加一个新的 "CocosDllMain.cpp" 文件并向其添加一个入口点函数。 "RunCocos" 之类的。确保此方法是从 dll 导出的,并且它将具有先前 "main" 方法的内容,但它应该将 HWND 参数作为参数传递给(修改后的)AppDelegate。这将是父 window.
- 将此dll添加为其他项目的依赖项,并在适当的时候调用"RunCocos"。