Введення в C та XAML

В останні роки розробників на C# і Visual Basic радували значними оновленнями їхньої технології UI у вигляді інфраструктур UI на основі XAML — Windows Presentation Foundation (WPF) та Silverlight. Ці інфраструктури відкрили нові можливості в проектуванні UI, давши свободу в кодуванні алгоритмів, не турбуючись про те, як представлятиметься UI, і свободу в розробці UI без кодування. Нарешті, з появою Windows 8, розробники на C++ можуть використовувати переваги сучасної UI-інфраструктури на основі XAML для створення програм Windows 8.

Чому XAML?

XAML – мова розмітки на базі XML, яка дозволяє визначати зовнішній вигляд програми, не вимагаючи розуміння того, як створюється цей UI у коді. Windows Runtime (WinRT) розбирає цю інформацію під час виконання, конструює відповідні класи елементів управління та формує дерево UI. Ваш код може маніпулювати цими об'єктами, і при правильному проектуванні зовнішній вигляд UI можна суттєво змінювати, взагалі не торкаючись його відокремленого коду. Це сприяє поділу праці між розробником, який займається відокремленим кодом, та проектувальником UI, зосередженим на зовнішньому вигляді програми.

Крім того, Visual Studio 2012 тісно інтегрується з Blend - потужним інструментом проектування спеціально оптимізованим для роботи з XAML і HTML. Blend забезпечує більш ефективну роботу у стилі WYSIWYG (включаючи дизайн анімацій) та надає більше властивостей XAML-об'єктів, ніж інтегрований у Visual Studio дизайнер.

Чому C++/CX?

Вибір C++ для написання програми Windows Store може бути обумовлений рядом причин. По-перше, зв'язка C++/CX з Windows Runtime на 100% є «рідною», з некерованим кодом та обліком посилань(Reference-counted). І це передбачає дуже малі витрати. По-друге, C++ здатний використовувати наявні бібліотеки (наприклад, Boost). Нарешті, C++ підтримує некеровані поверхні Direct3D і Direct2D у додатках Windows Store, що дозволяє створювати ігри та інші програми, що інтенсивно використовують графіку, з високою швидкодією. Малі витрати та висока продуктивність означає не тільки швидшу роботу програми, але й компактність — використання меншого обсягу інструкцій для виконання тих же завдань, а це зменшує споживання електроенергії і продовжує час роботи від акумуляторів.

Hello World від C++/CX і XAML

Visual Studio 2012 надає ряд шаблонів, які демонструють розширені можливості програм Windows Store. Шаблон Grid - багатофункціональний (feature-packed) додаток з безліччю уявлень, підтримкою переходів в альбомну та портретну орієнтації, розширеним зв'язуванням з даними, а також з функціональністю призупинення та відновлення. Однак, він не дуже добре підходить для демонстрації базової функціональності. Тому замість цього створіть нову програму C++ Windows Store за допомогою шаблону Blank App (XAML).

Створивши програму, знайдіть MainPage.xaml у Solution Explorer і відкрийте її. Цей файл відкривається для редагування в інтегрованому дизайнері XAML, вікно якого розділене на дві секції: представлення Design візуалізує UI, а представлення XAML показує код. Оновлення будь-якої із секцій призводить до оновлення та іншої. Це дає вам свободу в перетягуванні елементів керування для простоти редагування або точного керування розміткою при редагуванні коду.

xaml
Мал. 1. Елемент управління TextBlock та пов'язаний з ним XAML

Те самесаме можна було б зробити в коді, додавши атрибут Click= для XAML-тега і вказавши потрібне ім'я або поклавшись на функцію автоматичного заповнення для вибору імені за вас. У будь-якому випадку ви можете клацнути правою кнопкою миші подію та вибрати Navigate To Event Handler для переходу до відокремленого коду.

Тепер додайте до зворотного виклику наступний код:

Скомпілюйте та запустіть програму для перевірки того, що при натисканні кнопки зворотний виклик модифікує текст у TextBlock (рис. 2 ).

xaml
Мал. 2. Оновлений TextBlock

Тут багато відбувається «за лаштунками», тому я витрачу трохи часу на розбір цієї магії.

Що таке C++/CX?

C++/CX – це мовне розширення, яке забезпечує взаємодію між некерованим C++ та Windows Runtime. Це повністю некерована зв'язка, що дозволяє визначати, створювати екземпляри та використовувати об'єкти у виконуючому середовищі, але при цьому, як і раніше, забезпечуючи доступ до «рідної» функціональності C++ та синтаксису, з яким ви знайомі. Базові концепції перераховані в табл. 1 . (Хоча синтаксис C++/CX багато в чому схожий на такий у C++/Common Language Infrastructure, або CLI, це окреме і повністю некероване мовне розширення.)