如何使用WinRT创建经典的win32应用程序窗口? 什么是C++ WinRT等价物,Win32 API中的什么东西将注册窗口类,创建一个窗口,然后通过消息泵循环保持它生存?< /P> 我现在正在阅读和阅读WinRT文档,因为我想学习如何用Win32做的所有的东西,用现代C++方式。

如何使用WinRT创建经典的win32应用程序窗口? 什么是C++ WinRT等价物,Win32 API中的什么东西将注册窗口类,创建一个窗口,然后通过消息泵循环保持它生存?< /P> 我现在正在阅读和阅读WinRT文档,因为我想学习如何用Win32做的所有的东西,用现代C++方式。,c++,windows-runtime,c++-winrt,C++,Windows Runtime,C++ Winrt,到目前为止,我的经历很糟糕,我要坦率地承认,我不明白 我试过了,但因为我没有在容器中运行,所以线程的CoreWindow似乎还没有创建 int-WINAPI-wWinMain(HINSTANCE,HINSTANCE,LPWSTR,int) { winrt::init_单元(winrt::单元类型::单线程); winrt::Windows::UI::Core::CoreWindow window=winrt::Windows::UI::Core::CoreWindow::GetForCurren

到目前为止,我的经历很糟糕,我要坦率地承认,我不明白

我试过了,但因为我没有在容器中运行,所以线程的CoreWindow似乎还没有创建

int-WINAPI-wWinMain(HINSTANCE,HINSTANCE,LPWSTR,int)
{
winrt::init_单元(winrt::单元类型::单线程);
winrt::Windows::UI::Core::CoreWindow window=winrt::Windows::UI::Core::CoreWindow::GetForCurrentThread();
window.Activate();
自动调度程序=window.dispatcher();
使用DispatcherOptions=winrt::Windows::UI::Core::CoreProcessEventsOption;
const DispatcherOptions=DispatcherOptions::ProcessUntilQuit;
dispatcher.ProcessEvents(选项);
}
C++/WinRT是使用Windows运行时(又称WinRT)API的方式。这些API源自
IInspectable
,IInspectable本身源自
IUnknown
。除了用于com对象的
winrt::com\u ptr
之外,它并没有为经典的Win32 API提供太多功能

您当然可以使用C++/WinRT从Win32 classic应用程序中使用Windows运行时API,但对于Win32 classic程序来说,没有“CoreWindow”这样的东西。所有的
Windows::UI::CoreWindow
都与通用Windows平台(UWP)应用程序相关


请参见

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


您可能会发现标题库很有用。它没有C++中的完全现代包装,C++,WinRT,但是你会发现库有很多Win32构建的智能包装器和各种便利助手。您可以找到文档

winrt通常被初始化为多线程。我不知道单线程是否有任何用途。关于你的第一行。如果你正在寻找一个C++库,可以帮助你编写一个经典的Win32桌面应用程序,请看一下。尽管C++/WinRT在其WinRT/base.h头中为Win32对象提供了一些资源包装器,但该头现在已生成。你也可以为一个经典的Win32桌面应用程序生成它,但我不确定它是如何工作的。考虑到它为Win32编程提供的功能有限,我可能会选择WIL。虽然随着时间的推移,大多数“Win32”和“UWP”功能和API变得更容易混合和匹配,但窗口系统仍然是一个例外。Win32 CreateWindow、HWNDs等只能直接从Win32/desktop/full trust应用程序使用,而UWP CoreWindow/AppWindow只能从UWP应用程序使用。虽然您可以使用Win32应用程序中的大多数WinRT API,但没有用于直接操作Win32 HWNDs的WinRT API,您只需一如既往地使用相同的平面C API(或建议使用的一些包装器,如WIL),下面是一个示例:因此该示例正在Win32桌面循环中设置XAML UI窗口?这也是可能的,但是这一个使用Windows.UI.Composition API来呈现一个带有HWND和消息循环的Win32风格的桌面应用程序。@ChuckWalbourn包含只使用
winrt::com_ptr
来使用DX、WASAPI等com内容,而不使用其他winrt API,这真的有意义吗。Win32应用程序和C++/WinRT的当前状态(2020)是什么?他们是否可以安全地使用WinRT API,这样的应用程序是否可以在经典桌面上不受限制地得到支持,并作为Windows应用商店应用程序打包和分发。我完全不知道目前正在发生什么。