Московский инженерно-физический институт
Вид материала | Практикум |
- Ю. С. Барсуков 1, А. Ю. Окунев 2 1 Московский инженерно-физический институт (государственный, 29.25kb.
- В. А. Курнаев Московский инженерно-физический институт (государственный университет),, 27.18kb.
- «Вегето-сосудистая дистония», 192.12kb.
- Перечен ь научных разделов и базовых вузов по научным разделам открытого конкурса, 247.02kb.
- Д. В. Гуцко Московский инженерно-физический институт (государственный университет), 34.47kb.
- В. А. Тумольский московский инженерно-физический институт (государственный университет), 27.44kb.
- К. С. Чистов Московский инженерно-физический институт (государственный университет), 24.11kb.
- Вдокладе рассматривается задача оценки рисков инвестиционных проектов электростанций, 29.4kb.
- Резюме Луценко Владимир Юрьевич, 22.32kb.
- Л. Ю. Грецкая московский инженерно-физический институт (государственный университет), 26.28kb.
Работы лабораторного практикума
Работа 1. Вызов функций Windows
a. Вызовите справку по функции GetSystemDirectory(), разберитесь в правилах ее вызова. С помощью этой функции получите и выведите в окно сообщения имя системного каталога Windows.
b. Вызовите справку по функции GetComputerName(), разберитесь в правилах ее вызова. С помощью этой функции получите и выведите в окно сообщения имя вашего компьютера.
c. С помощью программы Norton Commander создайте в вашем каталоге файл с произвольным именем и назначьте ему некоторую комбинацию атрибутов (только для чтения, системный и др.). Вызовите справку по функции GetFileAttributes(). Разобравшись в ее параметрах, получите с ее помощью код атрибутов вашего файла. Найдите на диске файл WINNT.H, а в нем макросы, определяющие константы вида FILE_ATTRIBUTE_HIDDEN и др. Расшифруйте полученный код атрибутов и удостоверьтесь, что он соответствует установленной вами комбинации атрибутов.
Работа 2. Главное окно приложения (пример 1-1 из настоящего пособия)
Отладив программу, приведенную в пособии, выполните с ней следующие операции:
a. Измените цвет главного окна приложения, загрузив кисть другого цвета. Перечень кистей, имеющихся на складе Windows, можно получить, просмотрев справку по обобщенной функции GetStockObject().
b. Замените макрос GetStockBrush() функцией CreateSolidBrush(), с помощью которой можно создать кисть произвольного цвета. Выберите для окна цвет по желанию (красный, желтый, фиолетовый и т. д.).
c. Просмотрев справку по структуре WNDCLASS, задайте классу окна стиль CS_NOCLOSE. Запустите приложение и попытайтесь завершить его работу стандартными способами (кнопка, системная клавиша Alt+F4, пункт "Закрыть" системного меню). Закройте приложение с помощью диспетчера задач Windows (клавиши Ctrl+Alt+Del).
d. Замените функцию CreateWindow() на функцию CreateWindowEx(), установив расширенный стиль окна WS_EX_TOPMOST. Изучите поведение такого окна, когда на рабочий стол одновременно выводятся окна нескольких приложений. Верните программу в исходное состояние, чтобы ее можно было использовать в качестве заготовки для последующих программ.
Работа 3. Вывод в главное окно приложения текста и фигур (пример 2-1 из настоящего пособия)
Отладив программу и убедившись, что изображение в главном окне соответствует рис. 2.1 пособия, исследуйте возможности рисования в главном окне приложения. Для этого удалите из оконной процедуры обработку сообщения WM_PAINT (проще всего это сделать, поставив знак комментария перед соответствующим макросом HANDLE_MSG). Убедитесь в том, что программа не потеряла своей работоспособности, хотя выводит лишь пустое окно. Выведите в главное окно какую-либо цветную фигуру (прямоугольник, эллипс) достаточно большого размера, поместив соответствующие строки непосредственно в главную функцию WinMain(), сразу после создания и показа окна. Для получения дескриптора контекста устройства воспользуйтесь функцией GetDC(), а для его освобождения – функцией ReleaseDC(). Изучите реакцию программы на изменение размеров окна, при котором граница окна пересекает нарисованную в окне фигуру.
Работа 4. Вывод в главное окно приложения текста и фигур (индивидуальное задание А)
На основе работы 3 разработайте программу в соответствии с индивидуальным заданием и убедитесь, что она работает правильно.
Работа 5. Меню и модальный диалог (пример 4-1 из настоящего пособия)
Введите текст программы 4-1, произвольно изменив в ней выводимое в диалог сообщение и названия пунктов меню. Убедитесь, что и меню, и диалог функционируют правильно.
Работа 6. Меню (индивидуальное задание В)
а. На основе работы 5 составьте программу в соответствии с индивидуальным заданием и убедитесь, что она работает правильно.
b. (Факультативно.) Предусмотрите помещение перед выбранным пунктом меню галочки. Установка (как и отмена) галочки выполняется посредством вызова функции CheckMenuItem(). Требуемый для этой функции дескриптор меню можно получить с помощью функции GetMenu().
c. (Факультативно.) Предусмотрите гашение (вывод серым цветом) выбранного пункта меню. Гашение (как и восстановление цвета) выполняется посредством вызова функции EnableMenuItem(). Как и в задании b, для получения дескриптора меню воспользуйтесь функцией GetMenu().
Работа 7. Модальный диалог в качестве главного окна
приложения (индивидуальное задание С)
Составьте программу без главного окна, выводящую на рабочий стол Windows при своем запуске модальный диалог с указанными в индивидуальном задании элементами управления. Предусмотрите перекрашивание окна диалога и элементов в нем, как это указано в индивидуальном задании.
Работа 8. Вывод графика в главное окно приложения
(индивидуальное задание D)
a. Программа составляется на основе работ 3 или 4 (вывод в окно текстов и фигур). В середине главного окна большого размера (600х400 пикселов) нарисуйте горизонтальную и вертикальную оси координат и выведите вокруг этих осей график указанной в задании математической функции. Абсциссы и ординаты точек графика вычисляйте в цикле (число шагов цикла указано в задании); абсцисса будет обозначать номер пиксела по горизонтальной оси, ордината – номер писксела по вертикальной оси. Каждую точку графика рисуйте небольшим цветным квадратиком размером в 2-3 пиксела. Не забудьте сдвинуть график в середину окна так, чтобы он правильно изображался относительно начала координат; при этом переверните его относительно горизонтальной оси, поскольку вертикальная нумерация пикселов в окнах Windows начинается от верхнего края окна, а не от нижнего края рисунка, как это принято при изображении любых графиков.
b. (Факультативно). Измените предыдущее задание (пункт а) так, чтобы вычисляемые ординаты кривой преобразовывались в номера пикселов относительно нижней границы окна. В этом случае при изменении размеров окна по вертикали график будет перемещаться вместе с перемещением нижней границы окна. Координату нижней границы рабочей области можно получить из структуры PAINTSTRUCT.
Работа 9. Немодальный диалог
В работе 6 (индивидуальное задание В) выводимое в окно изображение управлялось с помощью выбора пунктов меню. Удалите из программы меню, предусмотрев для управления выводом немодальный диалог с требуемым числом альтернативных кнопок (см. пример 4-3 настоящего пособия). При обработке сообщения WMINITDIALOG предусмотрите задание начального режима: вывод в окно одного из альтернативных изображений и установку соответствующей альтернативной кнопки в выбранное состояние вызовом функции SendDlgItemMessage().
Работа 10. Диалог с окном редактирования
a. Включите в состав программы работы 8 (индивидуальное задание D, график в главном окне приложения) немодальный диалог с окном редактирования (см. пример 4-5 настоящего пособия). Модифицируйте программу таким образом, чтобы масштаб графика по оси ординат определялся числом, вводимым с помощью окна редактирования. В функции DlgOnCommand() обработки сообщения WMCOMMAND от диалогового окна следует выполнить три действия:
- с помощью функции GetDlgItemText() переслать текст, введенный в окно редактирования (фактически – коэффициент масштабирования), в предусмотренную для этого символьную строку длиной 6-10 символов;
- с помощью функции atoi() преобразовать эту строку в целое число и занести его в глобальную переменную для коэффициента масштабирования;
- с помощью функции InvalidateRect() инициировать посылку в приложение сообщения WMPAINT, проводящего к перерисовыванию содержимого главного окна.
Указанные действия следует выполнять лишь в том случае, если идентификатор органа управления, от которого пришло сообщение, соответствует идентификатору окна редактирования.
Не забудьте включить в цикл обработки сообщений вызов функции TranslateMessage().
Выполните пробный прогон программы и убедитесь, что такая обработка сообщения от окна редактирования дает не вполне удовлетворительные результаты.
b. Модифицируйте предыдущую программу таким образом, чтобы масштаб графика изменялся не при вводе в окно редактирования нового числа, а лишь по команде оператора. С этой целью добавьте в диалоговое окно кнопку "Выполнить" и выполняйте преобразование содержимого окна редактирования в целое число только при нажатии на эту кнопку.
Работа 11. Программное создание меню
Модифицируйте программу из работы 6 (индивидуальное задание B), удалив из проекта файл ресурсов и выполнив установку меню программным образом (см. подраздел “Программное создание меню” настоящего пособия). Создание меню удобнее всего осуществить в функции обработки сообщения WMCREATE.
Работа 12. Плавающее меню
Модифицируйте предыдущую программу, заменив в ней статическое меню плавающим (см. раздел “Плавающее меню” настоящего пособия). Активизация плавающего меню должна выполняться при нажатии правой клавиши мыши, для чего в оконную функцию следует включить обработку сообщения WMRBUTTONDOWN, и все действия по созданию меню выполнить в функции обработки этого сообщения. Получите координаты вывода плавающего меню из параметров функции OnRButtonDown(). Убедитесь в неудовлетворительном позиционировании плавающего меню. Улучшите программу, получив экранные координаты мыши из пакета сообщения (структурной переменной msg).
Работа 13. График в диалоговом окне
На основе индивидуального задания С (вывод графика в главное окно) составьте программу, в которой в качестве главного окна приложения выступает модальный диалог без каких-либо органов управления (текстов, кнопок и проч.). Закрасьте окно диалога каким-нибудь цветом и выведите в него ваш график (см. пример 4-6 настоящего пособия).
Закрашивание диалогового окна, как и вывод в него графика, можно выполнить в функции обработки сообщения WMPAINT. Для закрашивания окна следует воспользоваться функцией FillRect(); требуемую для этой функции структуру RECT с координатами рабочей области можно получить из структуры PAINTSTRUCT.
Работа 14. Инструментальная панель (tool bar)
Воспользуйтесь программой из работы 6 (индивидуальное задание В). Выведите в главное окно, помимо обычного меню, инструментальную панель, состоящую из трех кнопок. Нажатие кнопок должно приводить к перекрашиванию фона главного окна в различные цвета. Для обозначения функций кнопок на них можно нарисовать крупные символы (например, круг или крест) соответствующего цвета. Процедура создания инструментальной панели описана в подразделе “Инструментальная панель” настоящего пособия. Для рисования кнопок воспользуйтесь редактором ресурсов среды программирования, как это описано ниже.
Вызовите редактор ресурсов в режиме создания растрового изображения (FileNewResource Project...Bitmap. Выбрав пункт меню BitmapSize and Attributes..., установите ширину изображения 48 пикселов, высоту 16 пикселов, 16 цветов, без компрессии. В таком рисунке поместятся изображения трех кнопок размером 16х16 пикселов. Выбором пунктов меню BitmapShowTool Palette и BitmapShowColor Palette выведите на экран палитры инструментов рисования и цветов. Выбором пункта меню BitmapZoom In увеличьте изображение до приемлемого размера. Разделите поле рисунка на три равные части (которые будут соответствовать трем кнопкам инструментальной линейки), нарисовав с помощью карандаша точки или вертикальные линии с горизонтальными координатами 15 и 31. Нарисуйте какие-либо цветные изображения для всех трех кнопок и залейте фон рисунка серым цветом. Выйдите из редактора ресурсов, сохранив рисунок под именем, например, 14.BMP.
В функцию OnCommand() введите обработку сообщений от трех новых управляющих элементов – кнопок. Обработка будет заключаться в присваивании глобальной переменной типа HBRUSH значения дескриптора кисти соответствующего цвета и вызове функции InvalidateRect() для инициирования перекрашивания главного окна.
В функции OnPaint() прежде всего закрасьте окно с помощью функции Fillrect(), используя упомянутый выше глобальный дескриптор кисти, который в функции OnCommand() уже принял требуемое значение. После этого проанализируйте значение глобального переключателя изображения и выведите ту или иную фигуру (в соответствии с индивидуальным заданием В).
Работа 15. Инструментальная панель со всплывающими
подсказками (tool tips)
Модифицируйте предыдущую программу, введя в нее всплывающие подсказки к кнопкам инструментальной панели. Организация всплывающих подсказок описана в подразделе “Всплывающие подсказки” настоящего пособия.
Работа 16. Пользовательские пиктограммы и курсоры
a. Пиктограмма. Загрузив среду Borland C++, создайте в ней новый ресурс – пиктограмму. Для этого командой FileNewResource Project откройте редактор ресурсов и выберите в нем пункт Icon Image. Если в кадре редактора не окажется панелей цветов или инструментов, выведите их выбором пунктов IconShowToolPalette и IconShowColorPalette. Если поле для рисования курсора окажется слишком маленьким, измените масштаб выбором пункта меню IconZoom In. Нарисуйте произвольное цветное изображение пиктограммы. Последовательно закрывая окна редактора ресурсов, сохраните созданное изображение в файле с расширением .ICO.
Воспользуйтесь программой из работы 8 (график в главном окне). Включите в проект файл ресурсов с предложением
имя_ресурса ICON "имя_файла_пиктограммы"
На этапе регистрации класса окна с помощью функции LoadIcon() загрузите созданный ресурс из экземпляра приложения (не из Windows) и поместите его дескриптор в соответствующий элемент структуры WNDCLASS. Убедитесь в том, что приложению назначена новая пиктограмма. Посмотрите, как выглядит приложение при выводе на экран содержимого вашей папки (с помощью значка “Мой компьютер”).
b. Простой черный курсор. Аналогично предыдущему пункту создайте новый ресурс – курсор (выбором пункта FileNew Resource ProjectCursor Image). По умолчанию курсор рисуется черным цветом по прозрачному полю (прозрачные области курсора отображаются в окне редактора темно-зеленым цветом). Нарисуйте пером какое-либо простое черное изображение – стрелку или галочку.
Воспользуйтесь предыдущим приложением. Измените в нем фон главного окна, сделав его цветным. Включите в его файл ресурсов предложение
имя_ресурса CURSOR "имя_файла_курсора"
На этапе регистрации класса окна с помощью функции LoadCursor() загрузите созданный ресурс из экземпляра приложения и поместите его дескриптор в соответствующий элемент структуры WNDCLASS. Убедитесь в том, что приложению назначен новый курсор.
c. Прозрачный и инверсный курсоры. Закройте окно с файлом .RC. Отобразите его снова в режиме Edit Resources. Щелкнув по крестику слева от пункта CURSOR, а затем по имени вашего курсора, получите его изображение в правом окне редактора ресурсов. Выбором пункта меню ResourceEdit перейдите в графический кадр редактора. Редактор позволяет рисовать курсор (или его отдельные детали) тремя цветами: черным, белым и инверсным по отношению к фону, на котором он находится. Кроме того, инструментам рисования курсора можно назначить режим прозрачности, что позволяет в процессе редактирования изображения курсора стирать его отдельные части. Режим черного цвета устанавливается щелчком левой клавиши мыши по большому черному квадрату на панели цветов; режим белого цвета – щелчком по большому белому квадрату; режим инверсного изображения – щелчком по маленькому розовому крестику в правой части панели цветов; переход к стиранию осуществляется щелчком по маленькому зеленому крестику там же. Текущий режим отображается в правой части панели инструментов. Выбранный цвет действует на все инструменты рисования (карандаш, ведерко с краской, пустые или залитые фигуры и пр.).
Добавьте к изображению курсора две залитые фигуры, например, круги и эллипсы (правильный круг рисуется при нажатой клавише Shift). Одну фигуру нарисуйте белым цветом, другую – в инверсном режиме. Можно также нарисовать фигуру черным тонким пером, залив ее белым цветом. Закройте все окна редактора, сохранив измененный ресурс.
Нарисуйте в главном окне приложения (помимо имеющего там графика) залитый каким-либо цветом круг или квадрат. Выполните прогон приложения и, перемещая созданный вами курсор по его окну, пронаблюдайте взаимодействие курсора с элементами изображения в окне.
Работа 17. Локализация программных продуктов
Воспользуйтесь программой из работы 11, в которой меню создавалось программным образом. Включите в приложение файл ресурсов и оформите все выводимые в окно текстовые строки (заголовок главного окна, а также заголовки пунктов меню) в качестве ресурса – таблицы строк, как это описано в подразделе “Таблицы строк и локализация программных продуктов” настоящего пособия.
Для извлечения этих строк из секции ресурсов выполнимого модуля в программу воспользуйтесь функцией LoadString(), в качестве второго параметра которой выступают номера, присвоенные строкам в файле ресурсов. Откомпилируйте программу и убедитесь, что она работает точно так же, как и раньше.
Закройте проект и перенесите в другой каталог файлы ресурсов .RC и .RES, а также исходный файл .CPP, лишив себя, таким образом, исходных текстов программы. Выведите на рабочий стол Windows значок для быстрого запуска вашей программы и убедитесь в его правильном функционировании.
Выполните локализацию программы для англоязычной страны, т. е. перевод надписей на английский язык при отсутствии исходного текста программы. Откройте в среде Borland C++ выполнимый модуль программы (.EXE) в режиме редактирования ресурсов Edit Resources. Щелкнув по крестику слева от пункта STRINGTABLE, а затем по появившейся строчке с номером 1, получите текст вашей таблицы строк. Выбором пункта меню ResourceEdit (или двойным щелчком по строчке 1 в левом окне редактора) перейдите в режим редактирования. Переведите надписи на английский язык. Выйдите из редактора ресурсов, отвечая положительно на его вопросы о компиляции и сохранении. Запустите программу с Рабочего стола. Убедитесь, что все измененные вами надписи выводятся теперь на английском языке.