- Отображение нескольких представлений с помощью ApplicationView Show multiple views with ApplicationView
- Что такое представление приложения? What is a view?
- Отображение нового представления Show a new view
- Главное представление The main view
- Дополнительные представления Secondary views
- Переключение между представлениями Switch from one view to another
- Общие сведения о библиотеке классов Class Library Overview
Отображение нескольких представлений с помощью ApplicationView Show multiple views with ApplicationView
Помогите пользователям работать эффективнее, дав им возможность открывать независимые части приложения в отдельных окнах. Help your users be more productive by letting them view independent parts of your app in separate windows. Если создать для приложения несколько окон, каждое окно будет работать независимо. When you create multiple windows for an app, each window behaves independently. На панели задач каждое окно отображается отдельно. The taskbar shows each window separately. Пользователи могут перемещать, отображать, скрывать окна приложения и менять их размеры независимо друг от друга, а также переключаться между окнами, как будто это разные приложения. Users can move, resize, show, and hide app windows independently and can switch between app windows as if they were separate apps. Каждое окно работает в собственном потоке. Each window operates in its own thread.
Что такое представление приложения? What is a view?
Представление приложения — это совокупность 1:1 потока и окна, которая используется приложением для отображения содержимого. An app view is the 1:1 pairing of a thread and a window that the app uses to display content. Оно представляется объектом Windows.ApplicationModel.Core.CoreApplicationView. It’s represented by a Windows.ApplicationModel.Core.CoreApplicationView object.
Представления управляются объектом CoreApplication. Views are managed by the CoreApplication object. Необходимо вызвать CoreApplication.CreateNewView, чтобы создать объект CoreApplicationView. You call CoreApplication.CreateNewView to create a CoreApplicationView object. CoreApplicationView объединяет CoreWindow и CoreDispatcher (которые хранятся в свойствах CoreWindow и Dispatcher). The CoreApplicationView brings together a CoreWindow and a CoreDispatcher (stored in the CoreWindow and Dispatcher properties). CoreApplicationView можно считать объектом, который использует среда выполнения Windows для взаимодействия с основной системой Windows. You can think of the CoreApplicationView as the object that the Windows Runtime uses to interact with the core Windows system.
Обычно работать непосредственно с CoreApplicationView не нужно. You typically don’t work directly with the CoreApplicationView. Вместо этого среда выполнения Windows предоставляет класс ApplicationView в пространстве имен Windows.UI.ViewManagement. Instead, the Windows Runtime provides the ApplicationView class in the Windows.UI.ViewManagement namespace. Этот класс предоставляет свойства, методы и события, которые используются при взаимодействии приложения с системой работы с окнами. This class provides properties, methods, and events that you use when your app interacts with the windowing system. Для работы с ApplicationView вызовите статический метод ApplicationView.GetForCurrentView, который получает экземпляр ApplicationView , связанный с текущим потоком CoreApplicationView. To work with an ApplicationView , call the static ApplicationView.GetForCurrentView method, which gets an ApplicationView instance tied to the current CoreApplicationView ’s thread.
Аналогично, платформа XAML создает программу-оболочку для объекта CoreWindow в объекте Windows.UI.XAML.Window. Likewise, the XAML framework wraps the CoreWindow object in a Windows.UI.XAML.Window object. В приложении XAML обычно происходит взаимодействие с объектом Window вместо непосредственной работы с CoreWindow. In a XAML app, you typically interact with the Window object rather than working directly with the CoreWindow.
Отображение нового представления Show a new view
Так как каждый макет приложения уникален, мы рекомендуем добавить кнопку «Новое окно» в предсказуемое расположение, например в правый верхний угол окна содержимого, которое можно открыть в новом окне. While each app layout is unique, we recommend including a «new window» button in a predictable location, such as the top right corner of the content that can be opened in a new window. Также следует учесть необходимость добавления параметра контекстного меню «Открыть в новом окне». Also consider including a context menu option to «Open in a new window».
Рассмотрим шаги для создания нового представления. Let’s look at the steps to create a new view. В данном примере новое представление запускается в ответ на нажатие кнопки. Here, the new view is launched in response to a button click.
Отображение нового представления To show a new view
Вызовите CoreApplication.CreateNewView, чтобы создать новое окно и поток для содержимого представления. Call CoreApplication.CreateNewView to create a new window and thread for the view content.
Отслеживайте Id нового представления. Track the Id of the new view. Это понадобится для отображения представления позже. You use this to show the view later.
Можно создать некоторую инфраструктуру в приложении, чтобы упростить отслеживание представлений, которые вы создаете. You might want to consider building some infrastructure into your app to help with tracking the views you create. Пример: класс ViewLifetimeControl в разделе Пример MultipleViews. See the ViewLifetimeControl class in the MultipleViews sample for an example.
В новом потоке заполните окно. On the new thread, populate the window.
При помощи метода CoreDispatcher.RunAsync запланируйте задачу в потоке пользовательского интерфейса для нового представления. You use the CoreDispatcher.RunAsync method to schedule work on the UI thread for the new view. Используйте лямбда-выражение, чтобы передать функцию методу RunAsync как аргумент. You use a lambda expression to pass a function as an argument to the RunAsync method. Результаты работы лямбда-функции влияют на поток нового представления. The work you do in the lambda function happens on the new view’s thread.
В XAML Frame обычно добавляется к свойству ContentWindow, а затем выполняется переход Frame к Page, где определено содержимое приложения. In XAML, you typically add a Frame to the Window‘s Content property, then navigate the Frame to a XAML Page where you’ve defined your app content. Подробные сведения о фреймах и страницах см. в статье Реализация навигации между двумя страницами. For more info about frames and pages, see Peer-to-peer navigation between two pages.
После заполнения нового Window необходимо вызвать метод Activate Window для отображения Window позднее. After the new Window is populated, you must call the Window ‘s Activate method in order to show the Window later. Результаты влияют на поток нового представления, так что активируется новое Window. This work happens on the new view’s thread, so the new Window is activated.
Наконец, скачайте Id нового используемого представления для его отображения позже. Finally, get the new view’s Id that you use to show the view later. Результаты также влияют на поток нового представления, поэтому ApplicationView.GetForCurrentView получает Id нового представления. Again, this work is on the new view’s thread, so ApplicationView.GetForCurrentView gets the Id of the new view.
После создания нового представления, вы сможете отобразить его в новом окне с помощью метода ApplicationViewSwitcher.TryShowAsStandaloneAsync. After you create a new view, you can show it in a new window by calling the ApplicationViewSwitcher.TryShowAsStandaloneAsync method. Параметр viewId в этом методе представляет собой целое число, уникальным образом идентифицирующее каждое представление в приложении. The viewId parameter for this method is an integer that uniquely identifies each of the views in your app. Вы получите представление Id, воспользовавшись свойством ApplicationView.Id или методом ApplicationView.GetApplicationViewIdForWindow. You retrieve the view Id by using either the ApplicationView.Id property or the ApplicationView.GetApplicationViewIdForWindow method.
Главное представление The main view
Первое представление, создаваемое при запуске приложения, называется главным. The first view that’s created when your app starts is called the main view. Это представление хранится в свойстве CoreApplication.MainView, и его свойство IsMain имеет значение true. This view is stored in the CoreApplication.MainView property, and its IsMain property is true. Вам не нужно создавать это представление, его создает приложение. You don’t create this view; it’s created by the app. Поток главного представления служит диспетчером для приложения, и события активации в приложении происходят в этом потоке. The main view’s thread serves as the manager for the app, and all app activation events are delivered on this thread.
Если открыты вспомогательные представления, окно главного представления может быть скрыто, например, по нажатию кнопки закрытия (x) на панели заголовка окна, но его поток остается активным. If secondary views are open, the main view’s window can be hidden – for example, by clicking the close (x) button in the window title bar — but its thread remains active. Вызов Close в Window главного представления приведет к возникновению InvalidOperationException. Calling Close on the main view’s Window causes an InvalidOperationException to occur. (Используйте Application.Exit, чтобы закрыть приложение.) Если работа потока главного представления завершается, приложение закрывается. (Use Application.Exit to close your app.) If the main view’s thread is terminated, the app closes.
Дополнительные представления Secondary views
Другие представления, в том числе все представления, создаваемые по вызову CreateNewView в коде приложения, являются дополнительными представлениями. Other views, including all views that you create by calling CreateNewView in your app code, are secondary views. Как главное представление, так и дополнительные представления хранятся в коллекции CoreApplication.Views. Both the main view and secondary views are stored in the CoreApplication.Views collection. Обычно дополнительные представления создаются в ответ на действия пользователя. Typically, you create secondary views in response to a user action. В некоторых случаях система создает дополнительные представления для приложения. In some instances, the system creates secondary views for your app.
Вы можете использовать функцию ограниченного доступа Windows для запуска приложения в режиме киоска. You can use the Windows assigned access feature to run an app in kiosk mode. После этого система создает дополнительное представление для представления пользовательского интерфейса приложения поверх экрана блокировки. When you do this, the system creates a secondary view to present your app UI above the lock screen. Приложению не разрешается создавать дополнительные представления, поэтому при попытке отобразить собственное дополнительное представление в режиме киоска возникает исключение. App-created secondary views are not allowed, so if you try to show your own secondary view in kiosk mode, an exception is thrown.
Переключение между представлениями Switch from one view to another
Следует учесть необходимость предоставления пользователю возможности вернуться в главное окно из дополнительного. Consider providing a way for the user to navigate from a secondary window back to its parent window. Для этого используйте метод ApplicationViewSwitcher.SwitchAsync. To do this, use the ApplicationViewSwitcher.SwitchAsync method. Вызовите этот метод из потока окна, из которого вы переключаетесь, и передайте идентификатор представления окна, на которое вы переключаетесь. You call this method from the thread of the window you’re switching from and pass the view ID of the window you’re switching to.
Используя SwitchAsync, можно определить, следует ли закрыть начальное окно и удалить его из панели задач, указав значение ApplicationViewSwitchingOptions. When you use SwitchAsync, you can choose if you want to close the initial window and remove it from the taskbar by specifying the value of ApplicationViewSwitchingOptions.
Общие сведения о библиотеке классов Class Library Overview
В этом обзоре классифицируются и описываются классы в библиотека Microsoft Foundation Class (MFC) версии 9,0. This overview categorizes and describes the classes in the Microsoft Foundation Class Library (MFC) version 9.0. Классы в MFC вместе составляют платформу приложения — платформу приложения, написанную для Windows API. The classes in MFC, taken together, constitute an application framework — the framework of an application written for the Windows API. Задача программирования заключается в том, чтобы заполнять код, относящийся к конкретному приложению. Your programming task is to fill in the code that is specific to your application.
Классы библиотеки представлены в следующих категориях: The library’s classes are presented here in the following categories:
В разделе Общие принципы проектирования классов объясняется, как была РАЗРАБОТАНА библиотека MFC. The section General Class Design Philosophy explains how the MFC Library was designed.
Общие сведения о платформе см. в разделе Использование классов для написания приложений для Windows. For an overview of the framework, see Using the Classes to Write Applications for Windows. Некоторые из перечисленных выше классов являются классами общего назначения, которые можно использовать за пределами платформы и предоставляют полезные абстракции, такие как коллекции, исключения, файлы и строки. Some of the classes listed above are general-purpose classes that can be used outside of the framework and provide useful abstractions such as collections, exceptions, files, and strings.
Чтобы просмотреть наследование класса, используйте диаграмму иерархия классов. To see the inheritance of a class, use the Class Hierarchy Chart.
В дополнение к классам, перечисленным в этом обзоре, Библиотека MFC содержит ряд глобальных функций, глобальных переменных и макросов. In addition to the classes listed in this overview, the MFC Library contains a number of global functions, global variables, and macros. В разделе макросы и глобальные классы MFCпредставлен обзор и подробное описание этих элементов, которые следуют алфавитному представлению классов MFC. There is an overview and detailed listing of these in the topic MFC Macros and Globals, which follows the alphabetical reference to the MFC classes.