Как создать классическое окно приложения win32 с WinRT? - PullRequest
0 голосов
/ 04 июля 2019

Что является эквивалентом C ++ WinRT для того, что в Win32 API могло бы зарегистрировать класс окна, создать окно и затем сохранить его в действии через цикл обработки сообщений?

В настоящее время я смотрю и читаю документацию для WinRT, потому что я хотел научиться делать все то, что я делал в Win32, современным C ++ способом.

Мой опыт до сих пор был ужасным, и я просто должен сразу признать, что я не получаю его.

Я попробовал это, но поскольку я не работаю в контейнере, похоже, что 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 ]

1 голос
/ 06 июля 2019

C ++ / WinRt был разработан для поддержки прогнозируемых API, написанных с использованием системы типов Windows Runtime.К ним относятся API-интерфейсы Windows.UI.XAML и Winodws.UI.Composition.Эти API предназначены для приложений в стиле UWP и имеют очень ограниченные возможности взаимодействия с классическими API Win32.

Вы можете найти полезными библиотеки заголовков WIL .Он не имеет полных современных оболочек для C ++, которые вы получаете с C ++ / WinRT, но вы обнаружите, что в библиотеках есть умные оболочки и различные вспомогательные средства для многих конструкций Win32.Вы можете найти документацию здесь .

1 голос
/ 05 июля 2019

C ++ / WinRT - это «современный C ++» способ использования API-интерфейсов Windows Runtime (a.k.a. WinRT). Эти API являются производными от IInspectiable, который сам по себе происходит от IUknown. Кроме winrt::com_ptr для COM-объектов, он не очень хорош для классических Win32 API.

Вы, безусловно, можете использовать C ++ / WinRT для использования API-интерфейсов среды выполнения Windows из классического приложения Win32, но для классических программ Win32 такого понятия, как «CoreWindow», не существует. Все Windows::UI::CoreWindow относится к приложениям универсальной платформы Windows (UWP).

См. Документы Microsoft

...