Skip to content

Commit

Permalink
Windows 10 Version 1903 - July 2019 Update
Browse files Browse the repository at this point in the history
  • Loading branch information
oldnewthing committed Jul 25, 2019
1 parent cdfd8ef commit 81f5916
Show file tree
Hide file tree
Showing 243 changed files with 5,082 additions and 1,823 deletions.
1 change: 1 addition & 0 deletions Samples/AppWindow/cppwinrt/AppWindow.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<IncludePath>$(VC_IncludePath);$(UniversalCRT_IncludePath);$(WindowsSDK_IncludePath);..\..\..\SharedContent\cppwinrt</IncludePath>
<CppWinRTOptimized>true</CppWinRTOptimized>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
Expand Down
46 changes: 23 additions & 23 deletions Samples/AppWindow/cppwinrt/Project.idl
Original file line number Diff line number Diff line change
Expand Up @@ -14,36 +14,36 @@ namespace SDKTemplate
[default_interface]
runtimeclass Scenario1_SecondaryWindow : Windows.UI.Xaml.Controls.Page
{
Scenario1_SecondaryWindow();
Scenario1_SecondaryWindow();
}

[default_interface]
runtimeclass Scenario2_DisplayRegion : Windows.UI.Xaml.Controls.Page
{
Scenario2_DisplayRegion();
}
[default_interface]
runtimeclass Scenario2_DisplayRegion : Windows.UI.Xaml.Controls.Page
{
Scenario2_DisplayRegion();
}

[default_interface]
runtimeclass Scenario3_Size : Windows.UI.Xaml.Controls.Page
{
Scenario3_Size();
}
[default_interface]
runtimeclass Scenario3_Size : Windows.UI.Xaml.Controls.Page
{
Scenario3_Size();
}

[default_interface]
runtimeclass Scenario4_CompactOverlay : Windows.UI.Xaml.Controls.Page
{
Scenario4_CompactOverlay();
}
[default_interface]
runtimeclass Scenario4_CompactOverlay : Windows.UI.Xaml.Controls.Page
{
Scenario4_CompactOverlay();
}

[default_interface]
runtimeclass Scenario5_RelativePositioning : Windows.UI.Xaml.Controls.Page
{
Scenario5_RelativePositioning();
}
[default_interface]
runtimeclass Scenario5_RelativePositioning : Windows.UI.Xaml.Controls.Page
{
Scenario5_RelativePositioning();
}

[default_interface]
runtimeclass SecondaryAppWindowPage : Windows.UI.Xaml.Controls.Page
{
SecondaryAppWindowPage();
}
SecondaryAppWindowPage();
}
}
14 changes: 7 additions & 7 deletions Samples/AppWindow/cppwinrt/SampleConfiguration.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,15 @@ IVector<Scenario> implementation::MainPage::scenariosInner = winrt::single_threa
{
Scenario{ L"Create and show secondary window", xaml_typename<SDKTemplate::Scenario1_SecondaryWindow>() },
Scenario{ L"Show window on another display", xaml_typename<SDKTemplate::Scenario2_DisplayRegion>() },
Scenario{ L"Specific size for secondary window", xaml_typename<SDKTemplate::Scenario3_Size>() },
Scenario{ L"CompactOverlay secondary window", xaml_typename < SDKTemplate::Scenario4_CompactOverlay>() },
Scenario{ L"Position secondary window", xaml_typename < SDKTemplate::Scenario5_RelativePositioning>() },
Scenario{ L"Specific size for secondary window", xaml_typename<SDKTemplate::Scenario3_Size>() },
Scenario{ L"CompactOverlay secondary window", xaml_typename < SDKTemplate::Scenario4_CompactOverlay>() },
Scenario{ L"Position secondary window", xaml_typename < SDKTemplate::Scenario5_RelativePositioning>() },
});

bool winrt::SDKTemplate::TryParseFloat(hstring const& str, float& result)
{
errno = 0;
wchar_t* endptr;
result = wcstof(str.c_str(), &endptr);
return errno == 0 && std::isfinite(result);
errno = 0;
wchar_t* endptr;
result = wcstof(str.c_str(), &endptr);
return errno == 0 && std::isfinite(result);
}
30 changes: 15 additions & 15 deletions Samples/AppWindow/cppwinrt/SampleConfiguration.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,22 @@

namespace winrt::SDKTemplate
{
struct unique_disabled_control
{
unique_disabled_control(Windows::UI::Xaml::Controls::Control const& control) : c{ control }
{
c.IsEnabled(false);
}
struct unique_disabled_control
{
unique_disabled_control(Windows::UI::Xaml::Controls::Control const& control) : c{ control }
{
c.IsEnabled(false);
}

unique_disabled_control(const unique_disabled_control&) = delete;
void operator=(unique_disabled_control const&) = delete;
unique_disabled_control(const unique_disabled_control&) = delete;
void operator=(unique_disabled_control const&) = delete;

~unique_disabled_control()
{
c.IsEnabled(true);
}
Windows::UI::Xaml::Controls::Control c;
};
~unique_disabled_control()
{
c.IsEnabled(true);
}
Windows::UI::Xaml::Controls::Control c;
};

bool TryParseFloat(hstring const& str, float& result);
bool TryParseFloat(hstring const& str, float& result);
}
1 change: 1 addition & 0 deletions Samples/AppWindow/cppwinrt/Scenario1_SecondaryWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

#include "pch.h"
#include "Scenario1_SecondaryWindow.h"
#include "Scenario1_SecondaryWindow.g.cpp"

using namespace winrt;
using namespace Windows::Foundation;
Expand Down
2 changes: 1 addition & 1 deletion Samples/AppWindow/cppwinrt/Scenario1_SecondaryWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ namespace winrt::SDKTemplate::implementation

private:
Windows::UI::WindowManagement::AppWindow appWindow{ nullptr };
Windows::UI::Xaml::Controls::Frame appWindowFrame{};
Windows::UI::Xaml::Controls::Frame appWindowFrame{};

void OnWindowClosed(Windows::UI::WindowManagement::AppWindow const& sender, IInspectable const&);
};
Expand Down
183 changes: 92 additions & 91 deletions Samples/AppWindow/cppwinrt/Scenario2_DisplayRegion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

#include "pch.h"
#include "Scenario2_DisplayRegion.h"
#include "Scenario2_DisplayRegion.g.cpp"
#include "SampleConfiguration.h"

using namespace winrt;
Expand All @@ -24,96 +25,96 @@ using namespace Windows::UI::Xaml::Navigation;

namespace winrt::SDKTemplate::implementation
{
Scenario2_DisplayRegion::Scenario2_DisplayRegion()
{
InitializeComponent();
}

void Scenario2_DisplayRegion::OnNavigatedTo(NavigationEventArgs const&)
{
// Check to see if we have more than one DisplayRegion, if not we disable the button since the scenario will not work

showWindowBtn().IsEnabled(NumberOfAvailableDisplayRegions() > 1);
}

fire_and_forget Scenario2_DisplayRegion::OnNavigatedFrom(NavigationEventArgs const&)
{
if (appWindow != nullptr)
{
co_await appWindow.CloseAsync();
}
}

int Scenario2_DisplayRegion::NumberOfAvailableDisplayRegions()
{
// Get the list of all DisplayRegions defined for the WindowingEnvironment that our application is currently in
IVectorView<DisplayRegion> displayRegions = ApplicationView::GetForCurrentView().WindowingEnvironment().GetDisplayRegions();

int availableDisplayRegions = 0;
// count all the DisplayRegions that are marked as available to the app for use.
for (DisplayRegion const& displayregion : displayRegions)
{
if (displayregion.IsVisible())
{
availableDisplayRegions++;
}
}
return availableDisplayRegions;
}

DisplayRegion Scenario2_DisplayRegion::GetOtherDisplayRegion(DisplayRegion currentAppDisplayRegion)
{
// Get the list of all DisplayRegions defined for the WindowingEnvironment that our application is currently in
IVectorView<DisplayRegion> displayRegions = ApplicationView::GetForCurrentView().WindowingEnvironment().GetDisplayRegions();
for (DisplayRegion const& displayRegion : displayRegions)
{
if (displayRegion != currentAppDisplayRegion && displayRegion.IsVisible())
{
return displayRegion;
}
}

return nullptr;
}

fire_and_forget Scenario2_DisplayRegion::Button_Click(IInspectable const&, RoutedEventArgs const&)
{
auto lifetime = get_strong();

unique_disabled_control re_enabled{ showWindowBtn() };

// Only ever create one window. If the AppWindow already exists call TryShow on it to bring it to foreground.
if (appWindow == nullptr)
{
// Create a new window
appWindow = co_await AppWindow::TryCreateAsync();
// Clean up when the window is closed
appWindow.Closed({ get_weak(), &Scenario2_DisplayRegion::OnWindowClosed });
// Navigate the frame to the page we want to show in the new window
appWindowFrame.Navigate(xaml_typename<SDKTemplate::SecondaryAppWindowPage>());
// Attach the XAML content to our window
ElementCompositionPreview::SetAppWindowContent(appWindow, appWindowFrame);
}

// Get DisplayRegion to position our window on
DisplayRegion secondaryDisplayRegion = GetOtherDisplayRegion(ApplicationView::GetForCurrentView().GetDisplayRegions().GetAt(0));
if (secondaryDisplayRegion != nullptr)
{
appWindow.RequestMoveToDisplayRegion(secondaryDisplayRegion);
}

// If the window is not visible, show it and/or bring it to foreground
if (!appWindow.IsVisible())
{
co_await appWindow.TryShowAsync();
}
}

void Scenario2_DisplayRegion::OnWindowClosed(AppWindow const&, IInspectable const&)
{
// Make sure we release the reference to this window, and release XAML resources.
appWindow = nullptr;
appWindowFrame.Content(nullptr);
}
Scenario2_DisplayRegion::Scenario2_DisplayRegion()
{
InitializeComponent();
}

void Scenario2_DisplayRegion::OnNavigatedTo(NavigationEventArgs const&)
{
// Check to see if we have more than one DisplayRegion, if not we disable the button since the scenario will not work

showWindowBtn().IsEnabled(NumberOfAvailableDisplayRegions() > 1);
}

fire_and_forget Scenario2_DisplayRegion::OnNavigatedFrom(NavigationEventArgs const&)
{
if (appWindow != nullptr)
{
co_await appWindow.CloseAsync();
}
}

int Scenario2_DisplayRegion::NumberOfAvailableDisplayRegions()
{
// Get the list of all DisplayRegions defined for the WindowingEnvironment that our application is currently in
IVectorView<DisplayRegion> displayRegions = ApplicationView::GetForCurrentView().WindowingEnvironment().GetDisplayRegions();

int availableDisplayRegions = 0;
// count all the DisplayRegions that are marked as available to the app for use.
for (DisplayRegion const& displayregion : displayRegions)
{
if (displayregion.IsVisible())
{
availableDisplayRegions++;
}
}
return availableDisplayRegions;
}

DisplayRegion Scenario2_DisplayRegion::GetOtherDisplayRegion(DisplayRegion currentAppDisplayRegion)
{
// Get the list of all DisplayRegions defined for the WindowingEnvironment that our application is currently in
IVectorView<DisplayRegion> displayRegions = ApplicationView::GetForCurrentView().WindowingEnvironment().GetDisplayRegions();
for (DisplayRegion const& displayRegion : displayRegions)
{
if (displayRegion != currentAppDisplayRegion && displayRegion.IsVisible())
{
return displayRegion;
}
}

return nullptr;
}

fire_and_forget Scenario2_DisplayRegion::Button_Click(IInspectable const&, RoutedEventArgs const&)
{
auto lifetime = get_strong();

unique_disabled_control re_enabled{ showWindowBtn() };

// Only ever create one window. If the AppWindow already exists call TryShow on it to bring it to foreground.
if (appWindow == nullptr)
{
// Create a new window
appWindow = co_await AppWindow::TryCreateAsync();
// Clean up when the window is closed
appWindow.Closed({ get_weak(), &Scenario2_DisplayRegion::OnWindowClosed });
// Navigate the frame to the page we want to show in the new window
appWindowFrame.Navigate(xaml_typename<SDKTemplate::SecondaryAppWindowPage>());
// Attach the XAML content to our window
ElementCompositionPreview::SetAppWindowContent(appWindow, appWindowFrame);
}

// Get DisplayRegion to position our window on
DisplayRegion secondaryDisplayRegion = GetOtherDisplayRegion(ApplicationView::GetForCurrentView().GetDisplayRegions().GetAt(0));
if (secondaryDisplayRegion != nullptr)
{
appWindow.RequestMoveToDisplayRegion(secondaryDisplayRegion);
}

// If the window is not visible, show it and/or bring it to foreground
if (!appWindow.IsVisible())
{
co_await appWindow.TryShowAsync();
}
}

void Scenario2_DisplayRegion::OnWindowClosed(AppWindow const&, IInspectable const&)
{
// Make sure we release the reference to this window, and release XAML resources.
appWindow = nullptr;
appWindowFrame.Content(nullptr);
}

}
32 changes: 16 additions & 16 deletions Samples/AppWindow/cppwinrt/Scenario2_DisplayRegion.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,28 +15,28 @@

namespace winrt::SDKTemplate::implementation
{
struct Scenario2_DisplayRegion : Scenario2_DisplayRegionT<Scenario2_DisplayRegion>
{
Scenario2_DisplayRegion();
struct Scenario2_DisplayRegion : Scenario2_DisplayRegionT<Scenario2_DisplayRegion>
{
Scenario2_DisplayRegion();

void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs const&);
fire_and_forget OnNavigatedFrom(Windows::UI::Xaml::Navigation::NavigationEventArgs const&);
void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs const&);
fire_and_forget OnNavigatedFrom(Windows::UI::Xaml::Navigation::NavigationEventArgs const&);

fire_and_forget Button_Click(IInspectable const&, Windows::UI::Xaml::RoutedEventArgs const&);
fire_and_forget Button_Click(IInspectable const&, Windows::UI::Xaml::RoutedEventArgs const&);

private:
Windows::UI::WindowManagement::AppWindow appWindow{ nullptr };
Windows::UI::Xaml::Controls::Frame appWindowFrame{};
private:
Windows::UI::WindowManagement::AppWindow appWindow{ nullptr };
Windows::UI::Xaml::Controls::Frame appWindowFrame{};

int NumberOfAvailableDisplayRegions();
Windows::UI::WindowManagement::DisplayRegion GetOtherDisplayRegion(Windows::UI::WindowManagement::DisplayRegion currentAppDisplayRegion);
void OnWindowClosed(Windows::UI::WindowManagement::AppWindow const& sender, IInspectable const&);
};
int NumberOfAvailableDisplayRegions();
Windows::UI::WindowManagement::DisplayRegion GetOtherDisplayRegion(Windows::UI::WindowManagement::DisplayRegion currentAppDisplayRegion);
void OnWindowClosed(Windows::UI::WindowManagement::AppWindow const& sender, IInspectable const&);
};
}

namespace winrt::SDKTemplate::factory_implementation
{
struct Scenario2_DisplayRegion : Scenario2_DisplayRegionT<Scenario2_DisplayRegion, implementation::Scenario2_DisplayRegion>
{
};
struct Scenario2_DisplayRegion : Scenario2_DisplayRegionT<Scenario2_DisplayRegion, implementation::Scenario2_DisplayRegion>
{
};
}
Loading

0 comments on commit 81f5916

Please sign in to comment.