- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - Эндрю Троелсен
Шрифт:
Интервал:
Закладка:
w.AddResource("happyDude", i);
w.AddResource("welcomeString", "Приветствие формата ресурсов");
// Фиксация файла.
w.Generate();
w.Close();
}
Здесь наибольший интерес представляет собой член ResXResourceWriter.AddResource(). Этот метод является перегруженным, чтобы вы имели возможность вставить как двоичные данные (такие, как изображение happyDude.bmp), так и текстовые (наподобие указанной выше строки). Обратите внимание на то, что каждый из вариантов предполагает использование двух параметров: имени соответствующего ресурса в файле *.resx и непосредственно данных. Метод Generate() фиксирует информацию в файле. В результате вы получаете XML-описание ресурсов изображения и строки. Для проверки откройте новый файл ResXForm.resx с помощью текстового редактора (рис. 20.23).
Рис. 20.23. XML-представление *.resx
Создание файла *.resources
Имея файл *.resx, вы можете использовать утилиту resgen.exe, чтобы сгенерировать двоичный эквивалент этого файла. Для этого откройте окно командной строки Visual Studio 2005, перейдите в корневой каталог вашего диска C и выполните следующую команду.
resgen resxform.resx resxform.resources
Теперь вы можете открыть новый файл *.resources с помощью Visual Studio 2005, чтобы увидеть данные в двоичном формате (рис. 20.24).
Рис. 20.24. Двоичное представление *.resources
Добавление файла *.resources в компоновочный блок .NET
Теперь можно встроить файл *.resources в компоновочный блок.NET, используя опцию /resources компилятора командной строки C#. Для примера скопируйте соответствующие файлы Program.cs, Form1.cs и Form1.Designer.cs в корневой каталог вашего диска C, откройте окно командной строки Visual Studio 2005 и выполните следующую команду.
csc /resource:resxform.resources /r:System.Drawing.dll *.cs
Если открыть созданный в результате этого компоновочный блок с помощью ildasm.exe, вы увидите, что манифест соответствующим образом обновлен, как показано на рис. 20.25.
Рис. 20.25. Встроенные ресурсы
Работа с ResourceWriter
В предыдущем примере мы использовали тип ResXResourceWriter, чтобы сгенерировать XML-файл, содержащий пары имен и значений для каждого ресурса приложения. Полученный в результате файл *.resx был затем обработан утилитой resgen.exe. Наконец, с помощью флага /resource компилятора C# файл *. resources был встроен в компоновочный блок. Но дело в том. что создавать файл *.resx совсем не обязательно (хотя наличие XML-представления ресурсов может оказаться полезным, поскольку оно вполне пригодно для анализа). Если вам не нужен файл *.resx, вы можете использовать тип ResourceWriter, с помощью которого двоичный файл *.resources можно создать непосредственно.
private void GenerateResourceFile() {
// Создание нового файла *.resources.
ResourceWriter rw;
rw = new ResourceWriter(@"C:myResources.resources");
// Добавление одного изображения и одной строки.
rw.AddResource("happyDude", new Bitmap("happyDude.bmp"));
rw.AddResource("welcomeString", "Приветствие формата ресурсов.");
rw.Generate();
rw.Close();
}
Полученный файл *.resources можно добавить в компоновочный блок, используя опцию /resources компилятора.
csc /resource:myresources.resources *.cs
Исходный код. Проект ResXWriter размещен в подкаталоге, соответствующем главе 20.
Генерирование ресурсов в Visual Studio 2005
С файлами *.resx и *.resources можно, конечно, работать вручную в командной строке, но Visual Studio 2005 предлагает средства автоматизации создания и встраивания ресурсов в проект. Для примера создайте новое приложение Windows Forms, назвав его MyResourcesWinApp. Открыв для созданного проекта окно Solution Explorer, вы увидите, что теперь с каждой формой в вашем приложении автоматически связывается файл *.resx (рис. 20.26).
Рис. 20.26. Автоматическое генерирование файлов *.resx в Visual Studio 2005
При добавлении вами ресурсов (например, изображений в PictureBox) с помощью визуальных инструментов проектирования этот файл *.resx будет изменяться автоматически. Более того, вы не должны вручную обновлять этот файл, чтобы указать пользовательские ресурсы, поскольку Visual Studio 2005 регенерирует этот файл при каждой компиляции проекта. Чтобы гарантировать правильную структуру этого файла, лучше всего позволить среде разработки самой управлять файлом *.resx формы.
Если вы захотите предложить пользовательский набор ресурсов, не связанный непосредственно с данной формой, просто добавьте новый файл *.resx (в нашем примере это файл MyCustomResources.resx), выбрав команду Project→Add New Item из меню (рис. 20.27).
Если открыть новый файл *.resx, соответствующий редактор позволит вставить необходимые строковые данные, изображения, звуковые фрагменты и другие ресурсы. Крайнее слева раскрывающееся меню позволит выбрать вид ресурса, который вы хотите добавить. Сначала добавьте новый строковый ресурс с именем WelcomeString, чтобы с его помощью задать то сообщение, которое вы хотите видеть (рис. 20.28).
Теперь добавьте изображение happyDude.bmp, сначала выбрав Images из крайнего меню, после этого – Add Existing File (рис. 20.29), а затем – указав файл happyDude.bmp в появившемся окне загрузки файла.
Рис. 20.27. Добавление нового файла *.resx
Рис. 20.28. Добавление нового строкового ресурса с помощью редактора файлов *.resx
Рис. 20.29. Добавление нового ресурса *.bmp с помощью редактора файлов *.resx
После этого вы обнаружите, что файл *.bmp скопирован в каталог вашего приложения. Выбрав пиктограмму happyDude в редакторе *.resx и используя возможности свойства Persistеnce, можно потребовать, чтобы данное изображение было непосредственно встроено в компоновочный блок, а не задавалось ссылкой на внешний файл (рис. 20.30).
Рис. 20.30. Встраивание указанных ресурсов
Теперь окно Solution Explorer предлагает новую папку под названием Resources, которая содержит все элементы, встроенные в компоновочный блок. Легко догадаться, что при открытии ресурса Visual Studio 2005 запускает соответствующий редактор. В любом случае, если вы теперь скомпилируете свое приложение, указанные вами строка и изображение будут встроены в компоновочный блок.
Чтение ресурсов программными средствами
Теперь, когда вы понимаете суть процесса встраивания ресурсов в компоновочный блок (с помощью csc.exe или Visual Studio 2005), нужно выяснить, как с помощью типа ResourceManager программно прочитать соответствующую информацию для использования в программе. Для этого добавьте в свою форму элементы Button и PictureBox (рис. 20.31).
Рис. 20.31. Обновленный интерфейс пользователя
Теперь обработайте событие Click для Button. Добавьте в обработчик указанного события следующий программный код.
// Не забудьте указать 'using'
// для System.Resources и System.Reflection!
private void btnGetStringData_Click(object sender, EventArgs e) {
// Создание менеджера ресурсов.
ResourceManager rm = new ResourceManager("MyResourcesWinApp.MyCustomResources", Assembly.GetExecutingAssembly());
// Получение встроенной строки (с учетом регистра!)
MessageBox.Show(rm.GetString("WelcomeString"));
// Получение встроенного изображения (с учетом регистра!)
myPictureBox.Image = (Bitmap)rm.GetObject("HappyDude");
// Необходимая 'уборка'.
rm.ReleaseAllResources();
}
Обратите внимание на то, что первый аргумент конструктора ResourceManager представляет собой полное имя файла *.resx (но без расширения файла). Второй параметр является ссылкой на компоновочный блок, содержащий соответствующий встроенный ресурс (в данном случае это текущий компоновочный блок). После создания ResourceManager вы можете вызвать GetString() или GetObject(), чтобы извлечь встроенные данные. Если вы запустите приложение и щелкнете на его кнопке, вы увидите, что извлеченные из компоновочного блока строковые данные отобразятся в MessageBox, а данные изображения – в PictureBox.
Исходный код. Проект MyResourcesWinApp размещен в подкаталоге, соответствующем главе 20.
На этом мы завершаем наш обзор возможностей GDI+ и пространств имен System.Drawing. Если вы заинтересованы в дальнейшем исследовании GDI+ (включая поддержку печати), обратитесь к книге Nick Symmonds, GDI+ Programming in C# and VB.NET (Apress, 2002).
Резюме
Аббревиатура GDI+ используется для обозначения ряда связанных пространств имен .NET, используемых для визуализации графических образов на поверхности производных от Control типов. Значительная часть этой главы была посвящена выяснению того, как работать с базовыми объектными типами GDI+ – цветами, шрифтами, графическими изображениями, перьями и кистями, используемыми в совокупности с "всемогущим" типом Graphics. В процессе обсуждения были рассмотрены и некоторые другие возможности GDI+, такие как проверка попадания указателя мыши в заданную область окна и перетаскивание изображений.