Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/samples/winrt/ImageManipulations/App.xaml.cpp
16337 views
1
//*********************************************************
2
//
3
// Copyright (c) Microsoft. All rights reserved.
4
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
5
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
6
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
7
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
8
//
9
//*********************************************************
10
11
//
12
// App.xaml.cpp
13
// Implementation of the App.xaml class.
14
//
15
16
#include "pch.h"
17
#include "MainPage.xaml.h"
18
#include "AdvancedCapture.xaml.h"
19
#include "Common\SuspensionManager.h"
20
21
using namespace SDKSample;
22
using namespace SDKSample::Common;
23
using namespace SDKSample::MediaCapture;
24
25
using namespace Concurrency;
26
using namespace Platform;
27
using namespace Windows::ApplicationModel;
28
using namespace Windows::ApplicationModel::Activation;
29
using namespace Windows::Foundation;
30
using namespace Windows::Foundation::Collections;
31
using namespace Windows::UI::Core;
32
using namespace Windows::UI::Xaml;
33
using namespace Windows::UI::Xaml::Controls;
34
using namespace Windows::UI::Xaml::Controls::Primitives;
35
using namespace Windows::UI::Xaml::Data;
36
using namespace Windows::UI::Xaml::Input;
37
using namespace Windows::UI::Xaml::Interop;
38
using namespace Windows::UI::Xaml::Media;
39
using namespace Windows::UI::Xaml::Navigation;
40
41
/// <summary>
42
/// Initializes the singleton application object. This is the first line of authored code
43
/// executed, and as such is the logical equivalent of main() or WinMain().
44
/// </summary>
45
App::App()
46
{
47
InitializeComponent();
48
this->Suspending += ref new SuspendingEventHandler(this, &SDKSample::App::OnSuspending);
49
}
50
51
/// <summary>
52
/// Invoked when the application is launched normally by the end user. Other entry points will
53
/// be used when the application is launched to open a specific file, to display search results,
54
/// and so forth.
55
/// </summary>
56
/// <param name="pArgs">Details about the launch request and process.</param>
57
void App::OnLaunched(LaunchActivatedEventArgs^ pArgs)
58
{
59
this->LaunchArgs = pArgs;
60
61
// Do not repeat app initialization when already running, just ensure that
62
// the window is active
63
if (pArgs->PreviousExecutionState == ApplicationExecutionState::Running)
64
{
65
Window::Current->Activate();
66
return;
67
}
68
69
// Create a Frame to act as the navigation context and associate it with
70
// a SuspensionManager key
71
auto rootFrame = ref new Frame();
72
SuspensionManager::RegisterFrame(rootFrame, "AppFrame");
73
74
auto prerequisite = task<void>([](){});
75
if (pArgs->PreviousExecutionState == ApplicationExecutionState::Terminated)
76
{
77
// Restore the saved session state only when appropriate, scheduling the
78
// final launch steps after the restore is complete
79
prerequisite = SuspensionManager::RestoreAsync();
80
}
81
prerequisite.then([=]()
82
{
83
// When the navigation stack isn't restored navigate to the first page,
84
// configuring the new page by passing required information as a navigation
85
// parameter
86
if (rootFrame->Content == nullptr)
87
{
88
if (!rootFrame->Navigate(TypeName(MainPage::typeid)))
89
{
90
throw ref new FailureException("Failed to create initial page");
91
}
92
}
93
94
// Place the frame in the current Window and ensure that it is active
95
Window::Current->Content = rootFrame;
96
Window::Current->Activate();
97
}, task_continuation_context::use_current());
98
}
99
100
/// <summary>
101
/// Invoked when application execution is being suspended. Application state is saved
102
/// without knowing whether the application will be terminated or resumed with the contents
103
/// of memory still intact.
104
/// </summary>
105
/// <param name="sender">The source of the suspend request.</param>
106
/// <param name="e">Details about the suspend request.</param>
107
void App::OnSuspending(Object^ sender, SuspendingEventArgs^ e)
108
{
109
(void) sender; // Unused parameter
110
111
auto deferral = e->SuspendingOperation->GetDeferral();
112
SuspensionManager::SaveAsync().then([=]()
113
{
114
deferral->Complete();
115
});
116
}
117
118