你如何以编程方式在WinRT C ++ Direct3D应用程序中创建TextBox?

时间:2012-08-31 16:13:41

标签: c++ windows-runtime direct3d11

我在Windows 8上的VS2012中创建了一个新项目: Visual C ++ | Windows Metro风格| Direct3D App

默认情况下,这会创建一个有效的应用类Direct3DApp1的D3D应用,该应用来自Windows::ApplicationModel::Core::IFrameworkView

我需要以编程方式创建Windows::UI::Xaml::Controls::TextBox并以某种方式将其插入此视图中。这似乎在定义XAML的其他项目类型中很容易,但是这个Direct3D App项目类型没有XAML。

如何在Direct3D图形上叠加TextBox,允许用户弹出键盘并输入文字?

扩展Direct3D App默认项目的全面运行的VS2012解决方案非常棒。谢谢!

2 个答案:

答案 0 :(得分:1)

这在大理石迷宫样本中得到证明(可能是其他DirectX样本,因为它在DirectXApp类中)

http://code.msdn.microsoft.com/windowsapps/DirectX-Marble-Maze-Game-e4806345

http://msdn.microsoft.com/en-us/library/windows/apps/br230257(v=vs.110).aspx

答案 1 :(得分:0)

原因是,为时已晚,但为了以防万一,您需要先使用XAML控件初始化XAML应用程序:

    (void)args; // Unused parameter
::Windows::UI::Xaml::Application::Start(ref new ::Windows::UI::Xaml::ApplicationInitializationCallback(
    [](::Windows::UI::Xaml::ApplicationInitializationCallbackParams^ p) {
        (void)p; // Unused parameter
        auto app = ref new ::MyApp::App();
    }));

并设置Windows :: UI :: Xaml :: Window :: Current-> Content

有关详细信息,请参阅http://developernote.com/2015/12/initialization-of-uwp-c-xaml-application/

我不确定Windows :: ApplicationModel :: Core :: IFrameworkView是否可以与此初始化方案共存,因此您可能需要稍微重构一下代码。