App.xaml.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. //
  2. // App.xaml.cpp
  3. // App 类的实现。
  4. //
  5. #include "pch.h"
  6. #include "MainPage.xaml.h"
  7. using namespace App1;
  8. using namespace Platform;
  9. using namespace Windows::ApplicationModel;
  10. using namespace Windows::ApplicationModel::Activation;
  11. using namespace Windows::Foundation;
  12. using namespace Windows::Foundation::Collections;
  13. using namespace Windows::UI::Xaml;
  14. using namespace Windows::UI::Xaml::Controls;
  15. using namespace Windows::UI::Xaml::Controls::Primitives;
  16. using namespace Windows::UI::Xaml::Data;
  17. using namespace Windows::UI::Xaml::Input;
  18. using namespace Windows::UI::Xaml::Interop;
  19. using namespace Windows::UI::Xaml::Media;
  20. using namespace Windows::UI::Xaml::Navigation;
  21. /// <summary>
  22. /// 初始化单一实例应用程序对象。这是执行的创作代码的第一行,
  23. /// 已执行,逻辑上等同于 main() 或 WinMain()。
  24. /// </summary>
  25. App::App()
  26. {
  27. InitializeComponent();
  28. Suspending += ref new SuspendingEventHandler(this, &App::OnSuspending);
  29. }
  30. /// <summary>
  31. /// 在应用程序由最终用户正常启动时进行调用。
  32. /// 将在启动应用程序以打开特定文件等情况下使用。
  33. /// </summary>
  34. /// <param name="e">有关启动请求和过程的详细信息。</param>
  35. void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ e)
  36. {
  37. auto rootFrame = dynamic_cast<Frame^>(Window::Current->Content);
  38. // 不要在窗口已包含内容时重复应用程序初始化,
  39. // 只需确保窗口处于活动状态
  40. if (rootFrame == nullptr)
  41. {
  42. // 创建一个 Frame 以用作导航上下文并将其与
  43. // SuspensionManager 键关联
  44. rootFrame = ref new Frame();
  45. rootFrame->NavigationFailed += ref new Windows::UI::Xaml::Navigation::NavigationFailedEventHandler(this, &App::OnNavigationFailed);
  46. if (e->PreviousExecutionState == ApplicationExecutionState::Terminated)
  47. {
  48. // TODO: 仅当适用时还原保存的会话状态,并安排
  49. // 还原完成后的最终启动步骤
  50. }
  51. if (e->PrelaunchActivated == false)
  52. {
  53. if (rootFrame->Content == nullptr)
  54. {
  55. // 当导航堆栈尚未还原时,导航到第一页,
  56. // 并通过将所需信息作为导航参数传入来配置
  57. // 新页面
  58. rootFrame->Navigate(TypeName(MainPage::typeid), e->Arguments);
  59. }
  60. // 将框架放在当前窗口中
  61. Window::Current->Content = rootFrame;
  62. // 确保当前窗口处于活动状态
  63. Window::Current->Activate();
  64. }
  65. }
  66. else
  67. {
  68. if (e->PrelaunchActivated == false)
  69. {
  70. if (rootFrame->Content == nullptr)
  71. {
  72. // 当导航堆栈尚未还原时,导航到第一页,
  73. // 并通过将所需信息作为导航参数传入来配置
  74. // 参数
  75. rootFrame->Navigate(TypeName(MainPage::typeid), e->Arguments);
  76. }
  77. // 确保当前窗口处于活动状态
  78. Window::Current->Activate();
  79. }
  80. }
  81. }
  82. /// <summary>
  83. /// 在将要挂起应用程序执行时调用。 在不知道应用程序
  84. /// 无需知道应用程序会被终止还是会恢复,
  85. /// 并让内存内容保持不变。
  86. /// </summary>
  87. /// <param name="sender">挂起的请求的源。</param>
  88. /// <param name="e">有关挂起请求的详细信息。</param>
  89. void App::OnSuspending(Object^ sender, SuspendingEventArgs^ e)
  90. {
  91. (void) sender; // 未使用的参数
  92. (void) e; // 未使用的参数
  93. //TODO: 保存应用程序状态并停止任何后台活动
  94. }
  95. /// <summary>
  96. /// 导航到特定页失败时调用
  97. /// </summary>
  98. ///<param name="sender">导航失败的框架</param>
  99. ///<param name="e">有关导航失败的详细信息</param>
  100. void App::OnNavigationFailed(Platform::Object ^sender, Windows::UI::Xaml::Navigation::NavigationFailedEventArgs ^e)
  101. {
  102. throw ref new FailureException("Failed to load Page " + e->SourcePageType.Name);
  103. }