Программируем для Windows 7 в Visual Studio 2010Источник: realcoding
Несколько недель назад, всего за два дня до релиза Windows 7, разработка Visual Studio достигла очередного важного этапа - стала доступна вторая CTP-сборка Visual Studio 2010, также известная как Visual Studio 2010 Beta 2. Мне всегда было интересно наблюдать за тем, как развиваются различные инструменты и инфраструктуры, как они приобретают новые возможности. Кажется, что каждый следующий релиз данного продукта становится лучше и лучше, предлагая разработчикам поддержку все большего числа языков программирования и позволяя им создавать проекты для постоянно растущего числа областей разработки, таких как web-приложения, клиентские приложения, приложения для мобильных платформ и программы, использующие параллельные вычисления, консоли и другие устройства. Несмотря на то, что на данный момент новая версия среды разработки Microsoft находится на стадии "beta", уже сейчас работать с Visual Studio 2010 гараздо проще, чем с VS 2008. Стало намного легче управлять вашими решениями и, что еще более важно, намного проще писать код и документацию к нему. Пользовательский интерфейс VS был значительно улучшен; он использует Windows Presentation Foundation (WPF), чтобы достичь большей упорядоченности и визуальной целостности, к тому же разработчики отказали от использования в интерфейсе устаревших трехмерных фасок у элементов UI. Использование WPF помогает разработчикам сконцентрировать внимание на важных элементах интерфейса, корректно распределяя рабочее пространство среды разработки между окнами и выделяя доминантным цветом текущее рабочее окно, снижая при этом цветовое выделение фона. Помимо этого, в новой версии есть также маленькие, простые и приятные улучшения, такие как возможность управления размером текста. Вы также можете перетащить отдельное окно из главного приложения Visual Studio на второй монитор, что означает еще и поддержку многомониторных конфигураций клиентскими приложениями VS. Улучшения, сделанные в технологии IntelliSense, наконец-то облегчат разработчикам процесс создания проектов на C++. Также не стоит забывать о новом окне отладчика, поддерживающего параллельную отладку и позволяющего вам увидеть ваши параллельные стеки. Также в новой версии появилась поддержка языка F# (язык функционального программирования) и многочисленные обновления C#, включая поддержку динамических ключевых слов. Операции над динамическими объектами реализуются в период выполнения приложения (более подробно об этом вы можете узнать из статьи Скотта Хансельмана (Scott Hanselman)). Также появилась поддержка новой версии спецификаций языка C++ - С++X0, включающих в себя, например, Lambda Expressions. Сборка решений C++ осуществляется MSBuild, что должно понравиться многим. Как обычно, обратная совместимость чрезвычайно важна, а потому необходимо упомянуть о том, что Visual Studio 2010 обладает так называемым свойством "multi-targeting". Это означает, что Visual Studio 2010 может обеспечить работу с .NET 2.0 через .NET 4.0, что позволяет вам работать с вашими старыми проектами в VS 2010 и пользоваться всеми теми улучшениями, о которых мы говорили выше. Однако в этой статье я хотел бы сосредоточить свое и ваше внимание на использовании Visual Studio 2010 для создания программ для Windows 7. Visual Studio 2010 содержит в себе несколько технологии и функций, которые могут помочь вам в написании приложений, использующих некоторые специфические возможности Windows 7. Ниже я расскажу вам о некоторых функциях Visual Studio 2010, о которых мы расскажем вам подробнее в наших следующих публикациях. .NET 4 и Windows 7 WPF и интеграция с панелью задач Есть два типа категорий в списке - задачи (tasks) и элементы (items); для работы с ними вы можете использовать JumpTask и JumpPath, соответственно. С ними вы можете работать с помощью XAML, выделенного (code-behind) кода, или их комбинации. Следующий фрагмент кода демонстрирует простую интеграцию задач в список переходов: Код:
<JumpList.JumpList>
<JumpList> <JumpTask ApplicationPath="notepad.exe" CustomCategory="External Tools" Description="Take Notes" Title="Start Notepad" IconResourcePath="notepad.exe" IconResourceIndex="0" /> <JumpTask ApplicationPath="calc.exe" Точно так же вы можете использовать XAML для добавления кнопок к эскизам окон панели задач, как показано в следующем фрагменте кода: Код:
<TaskbarItemInfo.ThumbButtonInfos>
<ThumbButtonInfo DismissWhenClicked="True" ImageSource="images/booktrip.png" Command="{Binding BookItinerary}" Description="Book the itinerary now" /> </TaskbarItemInfo.ThumbButtonInfos> Основной файловый диалог поддерживает работу с библиотеками WPF поддерживает мультисенсорный ввод WPF будет предоставлять эти события манипуляций, если свойство IsManipulationEnabled элемента будет установлено в "true". По умолчанию оно имеет значение "false" , так что вам придется самостоятельно включать это свойство для каждого элемента, для которого вы хотите использовать манипуляции жестами. Для этого нужно просто добавлять строчку IsManipulationEnabled=true в ваш XAML-код, как это показано в следующем примере: Код:
<Border Margin="10,5"
BorderBrush="DarkGoldenrod" BorderThickness="2" CornerRadius="10" MinHeight="75" IsManipulationEnabled="true"> Дополнительно вы можете также связать события ManipulationStarting и ManipulationCompleted для обеспечения выделенного кода реализации этих событий. WPF 4.0 также поддерживает низкоуровневые touch-сообщения или raw touch input. Вы можете взаимодействовать с такими событиями с любыми UIElement-объектами, используя события TouchDown, TouchMove и TouchUp, для каждого их которых есть версия для предварительного просмотра. Это может быть полезно, если вы пытаетесь отслеживать несколько касаний, которые управляют разными объектами, или если вы хотите обеспечить различную реакцию приложения на касания и передвижения мыши. В скором времени мы подробнее напишем про технологию мультисенсорного ввода в Windows 7 в общем и в WPF в частности. Обновления MFC Панель задач Код:
CMainFrame* mainFrm =
dynamic_cast<CMainFrame*>(AfxGetApp()->GetMainWnd()); if (mainFrm) mainFrm->SetTaskbarOverlayIcon(IDI_ICON_INFO,L"Info"); Для начала вам нужно получить дескриптор для главного окна приложения (окна верхнего уровня), который соответствует Win32 HWND. Затем, вы просто вызываете метод SetTaskbarOverlayIcon, на вход которому в виде параметра подаются HICON и строка, которая содержит в себе версию текста информации, переданной оверлеем, для соответствия требования доступности. Просто, не так ли? Класс CFrameWnd библиотеки MFC предоставляет функционал однооконного интерфейса (Single Document Interface, SDI) Windows, перекрывающихся или вплывающих окон Frame Window. В новом MFC этот класс был обновлен, и теперь он поддерживает такие функции панели задач, как многослойные иконки (overlay icon), индикатор выполнения (Progress Bar), списки переходов (jump list) и эскизы (thumbnail). В панель задач MFC по умолчанию встроена поддержка эскизов, а потому эти эскизы будут отображать любое изменение в пределах просматриваемого окна. Следовательно, за исключением реализации своих собственных способов прорисовки окна, вам не понадобится писать никакого кода для обновления изображения в эскизе. Для включения эскизов панели задач в MFC-приложении в мастере создания MFC-приложения все пользователям необходимо будет выбрать тип приложения "Multiple document" с включенной опцией "Tabbed documents". Когда приложение запущено, MFC будет делать снимки каждого окна и отправлять их в Taskbar API для отображения в эскизах. Результат будет выглядеть примерно так: Мультисенсорный ввод Код:
// Gesture handlers
virtual BOOL OnGestureZoom(CPoint ptCenter, long lDelta); virtual BOOL OnGesturePan(CPoint ptFrom, CPoint ptTo); virtual BOOL OnGestureRotate(CPoint ptCenter, double dblAngle); virtual BOOL OnGesturePressAndTap(CPoint ptFirstFinger, long lDelta); virtual BOOL OnGestureTwoFingerTap(CPoint ptCenter); Точно так же, вы можете зарегистрироваться для получения сообщений raw touch и стандартных сообщений о жестах. В Windows 7 сообщения о жестах и сообщения raw touch являются взаимоисключающими. Если вы зарегистрировались для получения raw touch сообщений для какого-либо конкретного окна, это окно прекратит получать сообщения о жестах. Если вы выбрали обработку сообщений raw touch, вы должны реализовать следующий дескриптор: Код:
virtual BOOL OnTouchInput(
CPoint pt, int nInputNumber, int nInputsCount, PTOUCHINPUT pInput); MFC облегчает вам жизнь, предоставляя много информации для каждого параметра касаний, например, координаты конкретной точки touch-совместимого устройства, которой коснулся пользователь. MFC также предоставляет ID параметра касания, т.е. первого, второго или третьего пальца, а также точное количество текущих касаний. Перезагрузка и восстановление через Restart Manager Для новых MFC-приложений вы можете использовать функцию Restart and Recovery, воспользовавшись MFC Application Wizard, как показано на следующем скриншоте: Все настраиваемые части API Restart Manager предоставляются пользователю через виртуальные элементы, которые могут быть переопределены. .NET и платформа Location Чтобы получить доступ к информации о местоположении, вам нужно создать объект GeoLocationProvider. Это главный объект Location Manager, через который вы можете зарегистрироваться для получения уведомлений LocationChange и синхронно считывать последние данные о местоположении. Далее вы должны вызвать метод Start для начала процесса получения данных от текущего провайдера местоположения. Чтобы проверить, доступны ли эти данные, вы можете воспользоваться свойством Status. Если данные доступны, вы можете получить данные о местоположении единожды, или же, воспользовавшись событием LocationChanged, непрерывно получать обновления текущего местоположения. Следующий фрагмент кода является значительно упрощенным примером, показывающим как получить текущие координаты GeoCoordinates (широта, долгота): Код:
GeoLocationProvider provider = new GeoLocationProvider();
provider.Start(); GeoCoordinate coordinate = provider.Location.Coordinate; if (coordinate != GeoCoordinate.Unknown) { //Business logic here } К сожалению, .NET 4 поддерживает только Location API, а не всю платформу Sensor and Location - предполагается, что .NET-реализация функции Location все еще не содержит части Sensor. Для доступа к функции Sensor через управляемый код вы можете использовать Windows API Code Pack. Параллельные вычисления и поддержка многоядерности Windows 7 и способна работать с <=256 ядрами; ConcRT также использует преимущества планирования непривилегированного режима (User Mode Scheduling, UMS) потоков. Именно поэтому любой вычислительный процесс, построенный на ConcRT, получает выходу от использования многоядерности. Другими словами, благодаря тому, что Parallel Pattern Library (PPL) и Asynchronous Agents включены в состав Visual C++ 10 CRT и имеют в своей основе ConcRT, любой вычислительный процесс, который вы построите на их использовании, будет масштабироваться между 256 ядрами (конечно, вам все равно придется писать код, однако масштабирование будет для вас бесплатным). Для приложений на управляемом коде ситуация не такая радужная. Управление потоком управляемого стека по умолчанию основывается на .NET ThreadPool (System.Threading.ThreadPool). Он не использует API новых процессорных групп Windows 7, и потому не может автоматически использовать возможности Windows 7 к масштабированию. Максимальное число процессов, которые может использовать threadpool, равно 64. Но еще не все потеряно - вполне возможно написать дополнительный TaskScheduler, который смог бы работать с более чем 64 процессами, и использовать остальную часть библиотеки Task Parallel Library с этим специальным планировщиком. Это было бы крутым проектом для CodePlex, правда? Visual Studio 2010 включает в себя массу новых технологий и усовершенствований, которые являют собой своего рода глазурь поверх пирога Windows 7. |