簡體   English   中英

如何使用WinRT創建經典的Win32應用程序窗口?

[英]How do you create a classic win32 application window with 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);
    }

C ++ / WinRT是使用Windows運行時(aka WinRT)API的“現代C ++”方式。 這些API是源自IInspectiable本身派生自IUknown 除了用於COM對象的winrt::com_ptr ,它對於經典Win32 API確實沒有提供太多幫助。

當然,您可以使用C ++ / WinRT從Win32經典應用程序中使用Windows運行時API,但是對於Win32經典程序,沒有諸如“ CoreWindow”之類的東西。 所有Windows::UI::CoreWindow與通用Windows平台(UWP)應用相關。

請參閱Microsoft Docs

C ++ / WinRt旨在支持使用Windows Runtime類型系統編寫的預計API。 這些包括Windows.UI.XAML和Winodws.UI.Composition API。 但是,這些API是為UWP風格的應用程序設計的,與經典Win32 API的接口功能非常有限。

您可能會發現WIL標頭庫很有用。 它沒有C ++ / WinRT提供的完整的C ++現代包裝器,但是您會發現這些庫具有智能包裝器和許多Win32構造的便利工具。 您可以在此處找到文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM