如何使用WinRT创建经典的Win32应用程序窗口?

时间:2019-07-04 18:36:28

标签: c++ windows-runtime c++-winrt

在Win32 API中,相当于C ++ WinRT的什么是注册窗口类,创建窗口,然后通过消息泵循环使其保持活动状态?

我目前正在查看和阅读WinRT的文档,因为我想学习如何用现代C ++方式完成Win32中曾经做过的所有工作。

到目前为止,我的经历非常糟糕,我只想直截了当地承认我没有得到。

我尝试了此操作,但是由于我没有在容器中运行,因此似乎尚未创建线程的CoreWindow。

    int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int)
    {
        winrt::init_apartment(winrt::apartment_type::single_threaded);
        winrt::Windows::UI::Core::CoreWindow window = winrt::Windows::UI::Core::CoreWindow::GetForCurrentThread();

        window.Activate();

        auto dispatcher = window.Dispatcher();

        using DispatcherOptions = winrt::Windows::UI::Core::CoreProcessEventsOption;
        const DispatcherOptions options = DispatcherOptions::ProcessUntilQuit;

        dispatcher.ProcessEvents(options);
    }

2 个答案:

答案 0 :(得分:1)

C ++ / WinRT是使用Windows Runtime(又称为WinRT)API的“现代C ++”方式。这些API是从IInspectiable派生的,而IUknown本身是从winrt::com_ptr派生的。除了用于COM对象的Windows::UI::CoreWindow之外,它对于经典的Win32 API确实没有太大作用。

您当然可以使用C ++ / WinRT从Win32经典应用程序中使用Windows运行时API,但是没有诸如Win32经典程序的“ CoreWindow”之类的东西。所有{{1}}与通用Windows平台(UWP)应用相关。

请参见Microsoft Docs

答案 1 :(得分:1)

C ++ / WinRt旨在支持使用Windows运行时类型系统编写的预计API。这些包括Windows.UI.XAML和Winodws.UI.Composition API。这些API是专为UWP风格的应用程序而设计的,与经典Win32 API的接口功能非常有限。

您可能会发现WIL头文件库很有用。它没有C ++ / WinRT提供的完整的C ++现代包装器,但是您会发现这些库具有智能包装器和许多Win32构造的便利工具。您可以找到文档here