Виджет
- элемент интерфейса, а гаджет - устройство.
В этой
статье я постараюсь рассказать
о том, что такое виджет Windows
и
как можно сделать несложную игру для
него. Виджеты в Windows
появились
на Vista
версии.
На Windows
7
они представлены в улучшенном варианте.
Разрабатывать их можно как в Visual
Studio, так
и простом блокноте. Виджеты поддерживают
Web-технологии,
это значит, что Silverlight
код
можно без проблем адаптировать для
Windows
Sidebar.
Документация
Windows
Sidebar (на
англ.):
http://msdn.microsoft.com/en-us/library/aa965850%28v=VS.85%29.aspx
Windows
Sidebar (боковая
панель)
– область
рабочего стола в Windows,
на
которой уже принято устанавливать
различные виджеты, как то часы,
калькуляторы, показатель нагрузки на
процессор и многое другое. Особенно
популярны стали виджеты для интернет-служб,
например Twitter,
Facebook, Вконтакте,
Youtube
и
других.
Возможности
Виджеты могут:
поигрывать медиа содержимое, начиная
от изображений и музыки, и до передовых
технологий трансляции через интернет.
Крому совместимости с web-технологиями,
виджеты способны взаимодействовать с
системой почти на одном уровне с
приложениями. О доступе виджета к
системе можно узнать здесь:
http://msdn.microsoft.com/en-us/library/ff486368%28v=VS.85%29.aspx
Silverlight
В
плане разработки виджета у Silverlight
очевидное
преимущество, в плане полной интеграции
с ОС, малыми потребностями (по сравнению
с флеш, например в проигрывании видео).
К тому же, уже есть готовый шаблоны для
разработки Silverlight-виджетов
на Windows:
http://visualstudiogallery.msdn.microsoft.com/bf347eb6-99bd-4c99-89d0-6ca3fe1eb54e
Статья о разработке
виджета на Silverlight
(англ.):http://blogs.msdn.com/b/charles_sterling/archive/2007/05/14/writing-a-windows-sidebar-gadget-in-silverlight-dead-simple.aspx
Теперь
к практике.
В
целом разработка виджета очень схожа
с созданием web-приложения.
Можно применить Silverlight,
JavaScript, Flash, в
общем все что душа пожелает.
Но
в этой статье игру будем делать на
JScript
используя
CSS.
Все виджеты
состоят из обязательных файлов, без
которых система их просто откажется
запускать:
Manifest — файл с описанием
виджета. Расскажу лишь о главных
параметрах.
-
<name>
- название виджета.
- autoScaleDPI
– параметр
введен начиная с Windows
7, принимает
true
или
false.
Он
говорит системе, поддерживает ли виджет
масштабирование. Если да.
- <namespace>
- параметр,
который просто должен быть. Как сказано
в документации, просто на будущее.
- <base>
- информация
о файле с содержимым виджета.
Вот другие параметры:
HTML –
файл
с описанием вида виджета. В этом файле
указывается не только его внешний
вид, но и вкладываются все скрипты,
компоненты и многое другое.
<!--
Game Field >>> --><span id="gadgetContent"></span>
</body>
</html>
Если вы
знакомы с JavaScript
(Jscript, VBScript), то
проблем быть не должно. Но есть также
и отличия в программировании виджета
от программирования web
сайта.
Например есть уникальные для виджетов
свойства, которые прописываются через
приставку g:
<g:background
id="puzzleBg" src="url(Images/background.png)"
style="position:absolute; z-index:-1;"/>.
<meta
http-equiv="MSThemeCompatible" CONTENT="yes">
- важный
и уникальный параметр для Windows.
Он
говорит системе, что содержимое является
совместимым с темой Windows.
Без
него виджет просто не будет выполняться,
хотя установить его можно.
<!--
Game Field >>> --><span id="gadgetContent"></span>
- объект DOM.
По
идее именно в нем и будет находится вся
игровая графика.
Для
удобства все компоненты игры лучше
распределить по директориями. Создаем
папки:
Images, Styles, Scripts.
Создаем
файл CSS
Styles\Styles.cssи
вписываем:
body
{
margin:
0;
width:
96px;
height:
96px;
font-family:
verdana;
font-weight:
bold;
font-size:
20px;
}
#gadgetContent
{
margin-top:
20px;
color:
Black;
width:
96px;
height:
96px;
vertical-align:
middle;
text-align:
center;
overflow:
hidden;
}
width
и
height
– размеры
содержимого. Остальные параметры можно
пропустить.
В
принципе код Jscript
не
сложнее C#.
Так
как виджет работает на DOM
принципе,
то изменять свойства объектов — просто.
Загрузка и расположения изображений
происходит прямо в коде: