我是 Win32 C++ 编程的新手。现在,我想创建一个能够托管 Metro (AppContainer) 应用程序的应用程序。似乎可以使用这些 COM 接口:
- IApplicationDesignModeSettings(MSDN 链接)
- IApplicationActivationManager(用于启动 Metro 应用程序)
我可以使用 IApplicationActivationManager 正常启动应用程序,但要能够在窗口内托管应用程序,需要在设计模式下启动应用程序。为了能够在设计模式下启动应用程序,我需要设置 IApplicationDesignModeSettings,它需要初始化 IInitializeWithWindow(MSDN 链接)。IInitializeWithWindow 的 Initialize() 方法需要一个“代理窗口”hwnd。这就是我的问题所在。我使用标准 CreateWindow() 和空回调创建了一个窗口,将该窗口 HWND 用作 IInitializeWithWindow->Initialize() 参数。但是这个方法不是返回 S_OK,而是返回 E_ACCESSDENIED 错误。为什么会这样?“代理窗口”是什么意思?可能的解决方案是什么?