КАК подготовить
и запустить проект Win32 API?
КАК выглядит простейшая программа для Windows?
КАК подготовить и запустить проект Win API?
Часто у читателей возникает резонный вопрос: "У меня есть текст API - программы.
Как мне его запустить?". В книгах по API обычно идут сплошные исходные
тексты, и это очень хорошо. Но редко где объясняется, а как же запустить свою
первую программу?
Поэтому, перед тем, как попросить вас что-то набрать, я хочу научить своих читателей
пользоваться компилятором. Проще всего компилировать API программы в Visual
C++ (часть большого пакета программ Visual Studio компании Microsoft), поэтому
мы будем пользоваться именно им.
Следующий резонный вопрос - какая версия? В 1998-м году вышла самая популярная
версия Visual Studio 6.0, которая, как не странно в некоторых фирмах используется
до сих пор. Именно в то время программирование для Windows развивалось особенно
бурно, и было подготовленно настоящее море специалистов по 6-й версии. Она проста
в использовании и не содержит многих наворотов, которые включали в последующие
версии, связанных с Интернет-технологиями и базами данных. Многие классные программисты,
в совершенстве владеющие MFC просто не хотят переучиваться от того, к чему привыкли.
Некоторые используют сразу несколько версий для совместимости.
Часто мне приходят письма читателей, а какую версию вы нам посоветуете?
Я всегда отвечаю, что версия роли не играет. Только в 6-й студии процесс создания
проекта несколько отличен. В Visual Studio .NET (7.0, 7.1), а также в 2003-й
и 2005-й процесс создания идентичен.
У вас может стоять любая из этих версий, и вам останется только выбрать рекомендации
для вашей версии.
Итак, маленькая предыстория. Когда
мы работали в Borland C++ 3.1 достаточно было создать новый файл, настучать
в него текст программы и запустить. Компилятор принимал имя файла и создавал
выполнимый EXE-файл. С тех пор концепция программирования несколько изменилась.
Программисты для Windows обычно работают с очень большим количеством файлов,
которые объединены в проект. Проект включает в себя не только исходные
тексты, но и библиотеки и внешние текстовые файлы, используемые для записи промежуточных
и конечных результатов, файлы типа Excell, базы данных XML, иконки, курсоры,
картинки, аудиои видеофайлы и многое другое. Поэтому ошибкой было бы писать
текст в редакторе типа "Блокнот", а потом пытаться открыть его с помощью
VC++ да ещё и скомпиллировать. Visual С изначально понимает только проекты,
причём созданные в нём самом.
Подчиняясь суровой необходимости, открываем Visual C++. На экране то, что обычно.
Ничего. В лучших традициях Microsoft - никакого намёка на то, что делать дальше...
Сейчас вам предстоит определиться с тем, какая версия Visual Studio стоит на
вашем компьютере. Если их несколько, имеет смыл использовать самую новую. Программисты
- это люди завтрашнего дня.
Итак, если у вас
стоит Visual Studio, то вам сюда. Сейчас я научу вас создавать программы на
API. Эти рекомендации пригодятся вам в дальнейшем, когда вы будете создавать
проекты для последующих, более сложных примеров.
Шаг
1 Запуск программы |
Запустите программу Visual C++ через меню пуск. На экране появится пустое окно программы, впрочем, готовое к сотрудничеству. Беглый осмотр говорит нам о том, что в программе есть свойственная всем продуктам Microsoft панель управления для удобного редактирования текстов, а также меню. Назначение многих элементов меню и кнопок из панели управления мы будем разбирать по ходу пьессы.
Шаг
2 Создание проекта |
В Visual Studio
можно создавать удивительно много полезных штук. Создание Win API - программ
- не единственное, что в ней можно делать. Чаще всего она используется для создания
программ на основе библиотеки классов MFC. Но и это не обязательно. Поэтому,
при создании нового проекта, надо его как следует настроить.
Выберите пункты меню File->New->Project.
У вас появятся аналогичные окна New или New Project. Для версий
6.0 и 7.0 соответственно.
![]() |
![]() |
В списке перечислены основные типы проектов, которые можно создавать в Visual
C++. Освоим пока только один из них.
Шаг
3 Определение содержания |
В окне New (New Project)
выберите тип "Win 32 Application" ("Win32 Project"). Win
32 Application - это и есть программа на API. Сейчас от нас требуется дать имя
нашему проекту - заметьте, не файлу, не будущей программе, а проекту. В большинстве
случаев это имя может быть любым, но мой вам совет - давайте говорящие имена,
чтобы потом не гадать, чем Project4 отличается от Project111. Пусть имя первого
проекта будет First. В поле Location будет указан путь, по которому будет создана
одноимённая папка для проекта First, в которой будет размещён весь наш проект.
Нажмите Ok.
![]() |
![]() |
Это ещё не всё. Появится
следующее окно, которое будет просить определить содержание проекта. В Visual
C++ есть некоторые шаблоны, которые позволяют избавить разработчика от многих
рутинных операций - они сами создают исходные файлы и даже прописывают в них
какой-то минимальный код. Так, например, чтобы не перетруждаться, мы можем создать
готовое окно с меню и строкой состояния. К шаблонам мы ещё вернёмся, а пока
изучим всё с азов. В Visual C++ 6.0 надо поставить галочку на An Empty
Project ("Пустой проект"), так как мы будем создавать всё
вручную, и нажать кнопку Finish. В 7-й версии надо перейти на
закладку Application Settings ("Настройки приложения")
и поставить галочку Application Type - Windows Application, Application
options: Empty рroject. И тоже нажать Finish ("Завершить")
.
Шаг
4 Пустой проект |
У вас появился готовый проект,
правда в нём пока ещё нет ровным счётом ничего. У нас есть проект, но пока нет
программы. Остаётся набрать исходный текст
и добавить его в проект. Вообще особенность пустых проектов - то, что надо добавлять
в него все файлы вручную, несмотря на то, исходники это, библиотеки или ресурсы.
Вот такой вид будут иметь пустые проекты:
![]() |
![]() |
Теперь познакомимся поближе
с редактором. Как и в любой программе Windows, в верхней части окна расположены
меню и панель инструментов. Она стандартная для всех приложений Microsoft, и
я думаю, со многими кнопками (такими, как Сохранить, Копировать, Вырезать, Вставить)
вы уже знакомы.
В нижней части программы, как и в Borland C++ окно комментариев компилятора.
В нём будет вестись журнал компиляции, компоновки и построения, отображаться
статус проекта, выдаваться предупреждения (warnings), ошибки (errors) и комменатрии.
Чтобы оно не мешало, его можно закрывать, когда вы работаете с кодом.
В левой части окно навигатора, в котором есть три вкладки: Files (Файлы), ClassView
(Вид классов) и Resource (Ресурсы).
Вкладка FileView - файлы, которые входят в проект. Они условно разделены
на три папочки: Source (исходники), Headers (Библиотеки, заголовочные файлы),
Resources (ресурсы - картинки, иконки, курсоры). В больших проектах количество
файлов и папок может доходить до тысячи, поэтому очень удобно иметь весь список
файлов перед собой, чтобы быстро получить доступ к нужному.
ClassView - диаграмма классов, используемых в программе. Поскольку язык
API процедурный, нам она пока не понадобится.
ResourceView - содержит наши ресурсы. Они описаны в файле ресурсов. Этот
файл носит вспомогательный характер, но он очень важен. В нём описаны все ресурсы
приложения - диалоговые окна, панели инстрментов, меню, картинки, иконки, курсоры
и многое другое. В MFC этот файл генерируется автоматически, нам придётся создавать
его вручную. Для этого придётся овладеть нехитрым языком описания ресурсов.
Обычно файл ресурсов имеет расширение: *.RC
Шаг
5 Включение нового файла |
Пока что проект пуст и не
содержит никаких файлов. Чтобы вы могли набирать исходные тексты из моей книги
и других книг, вы должны освоить процедуру создания пустого проекта и включения
в него файлов, описанные в этой главе. Рассмотрим методику включения файла исходника
для обоих версий.
![]() |
Visual
C++ 6.0 Выберем File->New. Появившееся окно похоже на то, что мы использовали для создания проекта. Но теперь в нём надо указать тип создаваемого файла С++ Source File - исходный текст на языке С++. Введём его имя в поле Name. Оно будет тоже First, как и имя проекта. Расширение срр указывать не обязательно - оно будет добавлено автоматически. Нажмите ОК. На экране появился открытый файл First.cpp, в который уже можно вводить исходный текст. Но то, что мы его создали вовсе не означает, что компилятор его "увидит". Его, оказывается, надо ещё включить в проект! Ладно, выбираем пункт меню Project->Add to Project. В окне "Открыть" укажем наш файл. |
![]() |
Visual C++ 7.0 Выберем File->New->File. Появится окно, представленное ниже. Вот, как это будет выглядеть: Выберем тип C++ Source File и нажмём Open. По умолчанию создаётся файл Source1.cpp. Сохраним его в папке проекта как First.cpp. Затем добавим в проект. Project->Add Existing Item. В окне укажем имя нашего файла. First.cpp. |
Вот теперь всё готово для
ввода программы. Если вы выберите в навигаторе вкладку Files и раскроете папочку
Source, то увидите, что в ней появился наш первый исходный файл First.cpp!
Примечание. Следите, чтобы все исходные файлы хранились в папке проекта. При
большом количестве файлов удобно сортировать их по каталогам. Но всё равно,
все каталоги должны храниться в одной общей папке - папке проекта.
Шаг
7 Ввод исходного текста программы |
Вот теперь в файл можно
ввести какой-то текст. Итак, первая программа!
Самая первая программка
будет такой:
Листинг №1 "Первая программа" |
#include<windows.h> |
Не бойтесь, если вы ещё
не знаете языка API. мы здесь и собрались для его изучения. Пока мы просто учимся
работать с компилятором. Введите этот текст в файл First.cpp и сохранить его.
Запустить программу на выполнение можно кнопкой F5. Компилятор переидёт
в режим отладки нашего проекта. Вас спросят, хотите ли вы построить выполнимый
файл. Вы ответите Yes, и через какое-то время, если всё правильно набрали, увидите
свою программу. Так будут запускаться на исполнение все наши программы.
После запуска build в папке проекта появится вложенная папка Debug,
в которую будет помещён созданный нами файл First.exe.
Эта программка не содержит главного окна, которое в большинстве своём считается
обязательным элементов для всех Windows-программ, если конечно они не консольные,
однако это уже полноценная программа для Windows, о чём мы заявили, когда включили
библиотеку windows.h. Далее идёт тело функции WinMain().
WinMain() - главная функция любой API программы - точка входа в неё.
Нечто подобное представляла собой и функция main(), когда мы работали
в DOS.
Как вы уже поняли, программа выводит на экран информационное окно, с которым
вы конечно уже нераз
сталкивались, когда работали в Windows в качестве пользователя.
Как видите, всё предельно просто. Обыкновенный процедурный язык СИ. Единственное,
что сейчас для нас будет представлять интерес - это функция вывода окна информационного
сообщения. Обычно такие сообщения бывают четырех видов: информационые (буковка
i на синем фоне), вопросительные (знак вопроса), предупредительные (восклицательный
знак), сообщения об ошибке (знак "Стоп"). API функция MessageBox
как раз и занимается тем, что формирует такое окно, наполняя его содержимым.
Она предназначена для создания информационных сообщений Windows. Функция простая,
но чрезывачайно важная, так как эти окна используются почти в каждой программе.
Кроме того, их очень удобно выводить для контроля промежуточных результатов
работы - значений переменных, состояния флагов.
Итак, рассмотрим функцию по порядку. Первый аргумент - идентификатор родительского
окна. У нас нет главного окна программы в принципе, поэтому он равен 0. Второй
аргумент - строка текста, которая будет выведена непосредственно в окне. Третий
- заголовок этого окна.
Чтобы изменить стиль окошка, измените 4-й аргумент. Он определяет тип окна в
зависимости от типа сообщений:
Число кнопок также может варьироваться:
Окно,
создаваемое MessageBox - стандартное окно Windows. Также к стандартным
окнам относятся такие известные вам диалоги, как: окно выбора папки, окно открытия
и сохранения файлов, окно выбора цвета, шрифта и окно настройки принтера. Они
нам очень помогают, но к сожалению никогда не заменят главного окна программы,
которое мы будем создавать сами.
Это была разминка с целью научить вас создавать проекты для Win32 API. С каждой
новой главой, мы будем исследовать всё более сложные и всё более интересные
вещи.
Задание:
Измените информационную иконку на вопросительную и придумайте вопрос, который
задаёт программа (например "Вы действительно хотите удалить файл?").
В строке заголовка окна введите имя программы (в данном случае "First").
Пусть в новом окне теперь будут две кнопки: "ОК и Отмена". Запустите
программу на выполнение.
Что будет дальше?
Вы наверное уже достаточно хорошо освоили работу с функцией MesaageBox и
хотите двигаться дальше. Спешу вас обрадовать, что в следующей главе вы уже
создадим своё первое окно!