Технологии разработки Windows–приложений в системе Microsoft Visual C 2008. Использование Windows API. ЛАБ1. Технологии разработки Windowsприложений в системе Microsoft Visual C 2008. Использование Windows api цель работы
Скачать 40.9 Kb.
|
Л а б о р а т о р н а я р а б о т а № 1 Технологии разработки Windows–приложений в системе Microsoft Visual C++ 2008. Использование Windows API Цель работы: изучить особенности программирования для операционной системы Windows и получить навыки разработки Windows–приложений в системе Microsoft Visual C++ 2008 с использованием Windows API. Windows-приложение может работать со средствами ввода и вывода компьютера только через функции, предоставленные операционной системой Windows; никакого прямого доступа к аппаратным ресурсам не допускается. Поскольку в Windows могут быть активными одновременно несколько программ, Windows определяет, какая из них должна получить ввод – щелчок мыши или нажатие клавиши – и соответственно оповещает нужную программу. То есть общее управлением всем взаимодействием с пользователем осуществляется операционной системой Windows. К тому же природа интерфейса между пользователем и Windows-приложением такова, что в любой момент времени возможно самое разнообразное воздействие на программу. Пользователь может выбрать любой из пунктов меню, щелкнуть на кнопке панели инструментов или же щелкнуть кнопкой мыши в любом месте окна приложения. Хорошо спроектированное Windows-приложение должно быть готовым обрабатывать ввод любого рода в любой момент времени, поскольку заранее неизвестно, какое именно воздействие произойдет. программами, управляемыми событиями, называются программы порядок выполнения отдельных частей которых определяется последовательностью действий пользователя, а, в конечном счете, – теми событиями, которые связаны с этими действиями. Windows-приложение состоит, прежде всего, из фрагментов кода, реагирующих на события, вызванные действиями пользователя либо самой операционной системой Windows. Программа может выглядеть сильно фрагментированной из-за множества не связанных между собой блоков кода, но основной элемент, связывающий ее в единое целое – это сама операционная система Windows. Все блоки, обслуживающие такие различные внешние события, как выбор пункта меню или щелчок мыши, имеют доступ к общему набору данных, специфичных для конкретного приложения. Эти данные приложения содержат информацию, имеющую отношение к тому, для чего программа предназначена, а также информацию о некоторых событиях, которые произошли во время выполнения программы. Эта общая коллекция данных позволяет разным частям программы, которые выглядят независимыми, взаимодействовать согласованным образом. Во-первых, можно писать программы на версии языка C++, соответствующей стандарту ISO/ANSI. Такие программы будут выполняться компьютером как “родные” (native). Во-вторых, можно писать программы, выполняющиеся на платформе .NET Framework под управлением общеязыковой исполняющей среды (Common Language Runtime – CLR) и написанные на расширенной версии языка C++, называемой C++/CLI, поскольку CLR представляет собой реализацию стандарта инфраструктуры общего языка (Common Language Infrastructure – CLI). – Использование Windows API. Это фундаментальный интерфейс, который предусматривает операционная система для коммуникаций между собой и приложением, выполняющимся под ее управлением – Использование библиотеки Microsoft Foundation Classes, известной как MFC. Это набор классов C++, инкапсулирующих функции для обращения к Windows API. – Использование Windows Forms. Это технология разработки приложений, выполняющихся под управлением CLR. Эти три технологии перечислены в порядке от требующего наибольших усилий программирования до наименьших. Операционная система Windows записывает каждое событие в сообщение и помещает его в очередь сообщений программы, которой это сообщение предназначено. Таким образом, сообщение Windows – это просто запись данных, имеющих отношение к событию, а очередь сообщений приложения – это просто последовательность таких сообщений, ожидающая обработки приложением. Отправляя сообщения, Windows может известить программу о том, что нечто должно быть сделано, или о том, что некоторая информация стала доступной, или же о том, что произошло событие вроде щелчка кнопкой мыши. Если программа правильно организована, она соответствующим образом реагирует на сообщение. Может существовать множество видов сообщений, и они могут поступать очень часто – по много раз в секунду, – например, когда передвигается мышь. Windows-приложение должно содержать функцию, специально предназначенную для обработки таких сообщений. Эта функция часто называется WndProc() или WindowProc(), хотя она не обязана иметь какое-то определенное имя, потому что Windows обращается к функции через указатель, предоставляемый Windows-приложением. Поэтому отправка сообщения Windows-приложению сводится к вызову операционной системой Windows предоставленной функции, обычно называемой WindowProc(), и к передаче необходимых данных Windows-приложению через аргументы этой функции. Обработка сообщения, переданного с данными в эту функцию, полностью задается программистом. Программисту не нужно писать код для обработки каждого сообщения. Можно обрабатывать только те из них, которые интересуют программу, передавая остальные обратно операционной системе Windows. Сообщение передается обратно Windows с помощью стандартной Windows-функции по имени DefWindowProc(), которая обеспечивает их обработку по умолчанию. Взаимодействие между любым Windows-приложением и самой системой Windows использует прикладной программный интерфейс Windows, известный также под названием Windows API. Он состоит из многих сотен стандартных функций, с помощью которых приложение взаимодействует с операционной системой Windows и наоборот. Во многих Windows-программах имена переменных имеют префикс, указывающий вид значений, содержащихся в этих переменных, и то, как они используются. Существует сравнительно немного префиксов, и часто они используются в комбинации. Такое применение префиксов называется венгерской записью. Она была предложена для того, чтобы минимизировать вероятность неправильного применения переменных, отличного от того, как они были определены, и как предполагалось их использовать. С появлением C++, с его строгой проверкой типов, исчезла необходимость в специальных усилиях в виде применения нотации для того, чтобы избежать таких проблем. Для простейшей Windows-программы, использующей Windows API, следует написать две функции: 1) функция WinMain(), с которой начинается выполнение программы и происходит ее основная инициализация; 2) функция WindowProc(), вызываемая самой операционной системой Windows для обработки сообщений приложения. Часть Windows-программы, реализуемая функцией WindowProc(), обычно оказывается большей ее частью, поскольку является тем местом, в котором находится специфичный для приложения код, отвечающий на сообщения, инициированные различного рода действиями пользователя. Функция WinMain() – это эквивалент функции main() консольного приложения. Именно здесь начинается выполнение и происходит базовая инициализация остальной части программы. Чтобы позволить операционной системе Windows передать данные функции, WinMain() принимает четыре параметра и возвращает значение типа int. Ее прототип выглядит следующим образом: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ); Четыре аргумента, передаваемых операционной системой Windows функции WinMain(), содержат важные данные. Первый аргумент, hInstance, имеет тип HINSTANCE, представляющий дескриптор экземпляра. Дескриптор (handle) – это целочисленное значение, идентифицирующее объект определенного рода, в данном случае – экземпляр программы (приложения) Следующий аргумент, передаваемый функции WinMain(), hPrevInstance, унаследован от 16-разрядных версий операционной системы Windows. В среде Windows 3.x этот параметр передавал дескриптор предыдущего экземпляра программы, если таковой имелся. Следующий аргумент, lpCmdLine – это указатель на символьную строку, содержащую командную строку, запустившую программу. Последний аргумент, nCmdShow, определяет внешний вид окна при его создании. |