Windows h c что это

Обновлено: 04.07.2024

КАК быстро освоить API?

Чтобы понять что мы будем изучать, предлагаю вам на минутку перенестись в далёкие 80-ые годы теперь уже прошлого века! То были времена безраздельного правления злого волшебника DOSa. До появления доброй феи - оконной оболочки Windows труд угнетённых программистов был тяжёлым и рутинным. Подобно рудокопам, пробивающим себе дорогу в каменной породе железными молотками, писали они свои программы. Большинство программ - утилиты, базы данных, информационные системы - создавались тогда в текстовом режиме - унылом и беспросветном, где существует только 16 цветов и где экран - крохотное поле 80X25 символов. Те же смельчаки, которые решались предоставить пользователю графический интерфейс, были настоящими героями.
Почему? Ну, во-первых, никаких специальных функций для работы с графикой в DOS не было и в помине, и практически каждому разработчику приходилось либо писать свои собственные библиотеки или классы для работы с графикой, каждый раз изобретая велосипед, либо использвать те, что создали его коллеги. Это был тихий ужас! Писать графические функции приходилось чуть ли не не ассмеблере, генерируя 10-й вектор прерывания. И вот печальный итог - каждая фирма создавала свои библиотеки шрифтов, картинок и элементов управления. И каждый раз, проектируя новую программу, приходилось возвращаться к той самой печке и заново придумывать интерфейс пользователя. Представьте себе, что не было никаких стандартов, и каждый программист делал интерфейс, как Бог на душу пошлёт. Так это хорошо! - Скажете вы, - никто не зависел от стандартов, навязанных Microsoft, было простор для творчества. Так-то оно так, только программисты, которые пишут непонятные программы, отвечают, что они никакие не дизайнеры и проектировать интерфейс пользователя не их задача. В результате, очень часто программы ещё худо-бедно работали, но работать в них было сущим мучением.
Бедный пользователь был вынужден каждый раз тратить драгоценное время, чтобы понять - что же программист хотел этим сказать, когда сделал именно такие кнопки и, простите, как всё это работает?

Разработчикам игр было хуже всех. Для того, чтобы написать такую игру, как DOOM, надо было опускаться к самым низам и программировать уже не столько DOS, сколько железо, напрямую обращаясь к видеопамяти PCI видеокарты - иначе не будет быстродействия, ведь тормозит обычно графика. А если вспомнить, что в составе MS-DOS никогда не было никаких драйверов, то приходилось учитывать все популярные на тот момент видеокарты, программируя графику для каждого типа отдельно, чтобы потом игра вообще пошла! Может быть вы помните те времена, когда приходилось вручную указывать тип видеокарты, а для звуковой карты указывать IRQ, DMA и количество каналов? Какой пользователь может это знать?

С появлением Windows появилась прекрасная возможность сосредоточить свои силы не столько на внешнем обрамлении программы - кнопках, флажках и меню, сколько на её содержании, сути - том, что она реально делает. Это на самом деле важно, так как труд программистов занимает много времени, а значит, стоит больших затрат. Для разработчиков на языке СИ была написана обширная библиотека windows.h, включавшая в себя всю поднаготную Windows и позволявшая в значительной степени унифицировать процесс разработки. А следовательно, и снизить затраты на разработку ПО. Всю эту огромную спецификацию программирования под Windows назвали API (Application Programming Interface) - интерфейс прикладного программирования.
API покрывает собой всё - графику, элементы управления, системные функции, работу с устройствами и ещё многое другое. По сути, API функции это промежуточно звено между пользователем и ядром операционной системы. При работе программы API функции превращаются в системные вызовы и обрабатываются ядром ОС. Ядро в свою очередь позволяет скрыть от программиста всё железо, представляя всё hardware, как виртуальные устройства - виртуальную видеокарту, виртуальный монитор, виртуальный принтер.

Время шло, и компанией Microsoft была разработана библиотека классов MFC (Microsoft Foundation Classes), а компанией Borland OWL (Object Window Library), облачившие API в объектно-ориентированный вид. Теперь уже никто не программирует окна и графику на процедурном API с нуля, для этого есть другие, более универсальные средства. Но несмотря на это, до сих пор API поддерживается всеми библиотеками классов и очень широко используется. Ни одна библиотека классов не включает в себя всех API-функций. Очень часто разработчики решают за нас - что нам нужно, а без чего мы обойдёмся. Всегда, когда под рукой нет нужного средства, на помощь приходят API-функции. И если вы хотите, чтобы программа работала быстрее, а выполнимый файл занимал меньше места, не ленитесь использовать API-функции.
Ежегодно спецификация API пополняется новыми функциями, которые внедряются в систему с помощью патчей и сервисных пакетов. С каждой новой версией Windows, API разрастается в геометрической прогрессии, и выпускаемые по ней спецификации выглядят уже, как многотомные энциклопедии. Это основа-основ Windows. Используя нужные API-функции, вы всегда сможете сделать в всё, что захотите. Windows станет для вас ласковым ручным котёнком. Вы сможете рисовать на экране всё, что захотите, и самое удивительное - это будет работать!

В последнее время выходит великое множество литературы, посвящённой "интересным возможностям Windows", вроде "Windows глазами хаккера" или "Прикольные штучки для Windows", "Как напугать пользователя". Большинство исходных текстов в них написано именно на API.

Поскольку мы только начинаем изучение программирования для Windows, процедурный API-код подойдёт нам как нельзя лучше. Он поможет понять механизм программирования для Windows, даст нам базовые знания об этой операционной системе, её принципах и механизмах, подготовив в полной мере к изучению библиотек классов MFC и VCL. Изучив работу элементов управления, мы рассмотрим некоторые неочевидные на первый взгляд возможности Windows, заглянув за ту самую запретную черту, куда можно попасть только зная язык API.


КАК можно обойтись только windows.h?

Разработчики Windows в своё время явно погорячились, когда решили, что программист обойдётся одним единственным библиотечным файлом. Сначала было всё ничего, но он стал разрастаться и если бы вы его решили распечатать, вам пришлось бы сразу купить новый картридж для принтера и толстенную пачку бумаги. С каждой новой версией Windows число API функций всё прибывало, росло число структур, макросов и типов данных. На сегодняшний день windows.h включает в себя более 1000 одних только констант.

А кроме того, прототипы ВСЕХ API-функций. Что было делать? Современный файл windows.h разделили на 3 составляющих по назначению: kernel, user и gdi. Теперь эти файлы носят такие названия:

winuser.h - объявления из модуля USER.EXE или ассоциированые с ним
wingdi.h - интерфейс графических устройств (GDI), работа с графикой
windef.h - определение фундаментальных типов данных
winnls.h - поддержка национального языка в локализованных версиях
wincon.h - консольный ввод-вывод, минующий интерфейс графических устройств
winbase.h - базовый программный интерфейс.
и другие.

В любом случае, к API-программе придётся подключать только windows.h. И это большой плюс. В программировании под DOS приходилось отдельно подключать библиотеку для работы со строками string.h, графическую библиотеку graphics.h, библиотеку ввода-вывода stdio.h. Windows.h "знает" не только все API-функции, но кроме того ещё и все функции языка СИ, которые мы использовали раньше. Многие библиотеки, которые в DOS актуальны, с началом программирования для Windows сразу отошли в мир иной это:: graphics.h, dir.h, stdio.h, conio.h, stdlib.h, process.h, dos.h. Не скоро теперь они встретятся нам на пути!

Файл windows.h существует до сих пор и пополняется новыми функциями и обновляется с каждой новой версией Visual Studio. При использовании библиотек классов MFC вы не будете его подключать, но только потому, что он уже подключён. В первых программах на API мы будем использовать именно его.

Нужна библиотека Windows.h
Очень нужна библиотека Windows.h ввиде файлов с расширением .h Обратитесь к документации для.

При загрузке Windows появляется модуль - библиотека windows oyqgtipp.dll
при зпуске винды выскакивает окно что модуль библиотеки oyqgtipp.dll не найден ,что это за.

Приложение или библиотека C:\WINDOWS\system32\HID.DLL не является образом программы для Windows NT
Прошу помочь в решении следующего вопроса: У меня Windows XP. Во время работы компьютера.

Приложение или библиотека C:\Windows\system\cmicnfg.cpl не является образом прогграммы для Windows NT
Переустановил винду (Диск пошарпоный) При запуске винды выдаёт ошибку (вложение с низу) Не.

Добавлено через 12 секунд
какие команды?

Это: WinAPI, там собрано всё на все случаи жизни.

Добавлено через 2 минуты
Там есть всё для:
графического интерфейса
Работе с файлами
командный финтереейс mci
работы с сетью, звуком .
Может ещё кто добавит

Добавлено через 1 минуту
Вообще WinApi - это совокупность различных библиотек ОС Windows

Добавлено через 6 минут
Пример команда:
Копирование файла
CopyFile(const char *fn, const char *nf, bool flag);

Добавлено через 2 минуты
Может кто-то, ещё прототипов подкинет.

Jekidollar, отправная точка по функциям Win32 API на MSDN: Win32 and COM Development
Выбираешь интересующую тему и вперед - изучать функции. Насколько мне известно, то там их очень много. и количество их растет.
Много системных функций, для работы с процессами, потоками. Если будешь программировать под Windows, то обязательно узнаешь.

Решение

windows.h является Windows-конкретный файл заголовков для языка C программирования, который содержит заявления для всех функций в Windows API, все общие макросы, которые используются программистами окон, и все типы данных, используемых различными функциями и подсистем. Он определяет большое количество окон конкретные функции, которые могут быть использованы в С. Win32 API могут быть добавлены в проект программирования C, включив <windows.h> заголовка файла и ссылки на соответствующие библиотеки. Для использования функции в XXXX. DLL, программа должна быть увязана с XXXX. Lib (или Lib XXXX. В MinGW). Некоторые заголовки не связаны с расширением. DLL, но при статической библиотеки (например, scrnsave.h scrnsave.lib потребности).

Есть несколько файлов ребенка заголовок, который автоматически входит в windows.h. Многие из этих файлов не может быть просто включен сами по себе, из-за зависимостей.

windows.h может включать любую из следующих файлов заголовок:
excpt.h - Обработка исключений
stdarg.h - переменная аргумент функции (стандартный заголовок C)
windef.h - различные макросы и типы
winnt.h - различные макросы и типы (для Windows NT)
basetsd.h - различные типы
guiddef.h - тип GUID
ctype.h - характер классификации (стандартный заголовок C)
string.h - строк и буферов (стандартный заголовок C)
winbase.h - Kernel32.dll: ядро услуги
Winerror.h - коды ошибок Windows
WINGDI.H - GDI (Graphics Device Interface)
WINUSER.H - user32.dll: пользователь услугами
winnls.h - NLS (Native Language Support)
wincon.h - консоль услуги
winver.h - информация о версии
winreg.h - реестр Windows
winnetwk.h - Wnet (Windows Networking)
Winsvc.h - Windows Services и SCM (Service Control Manager)
imm.h - IME (редактор метода ввода)

Дополнительная включает в себя:
cderr.h - CommDlgExtendedError кодов функция ошибок
commdlg.h - общих диалоговых окон
dde.h - DDE (Dynamic Data Exchange)
ddeml.h - DDE Управление библиотека
dlgs.h - различные константы для общих диалоговых окон
lzexpand.h - LZ (Зив-Зива) компрессии / декомпрессии
mmsystem.h - Windows Multimedia
nb30.h - NetBIOS
rpc.h - RPC (Remote Procedure Call)
shellapi.h - оболочки Windows API
wincrypt.h - Cryptographic API
winperf.h - мониторинг эффективности
winresrc.h - используется в ресурсах
winsock.h - Winsock (Windows Sockets), версия 1.1
winsock2.h - Winsock (Windows Sockets), версия 2
winspool.h - Диспетчер очереди печати

в этом пошаговом руководстве показано, как создать традиционное Windows классическое приложение в Visual Studio. в примере приложения, которое вы создадите, будет использоваться Windows API для вывода "Hello, Windows desktop!". "Hello, World!". Код, созданный в этом пошаговом руководстве, можно использовать в качестве шаблона для создания других классических приложений Windows.

Для краткости в тексте пропущены некоторые операторы кода. В разделе Построение кода в конце документа показан полный код.

Предварительные требования

Компьютер под управлением Microsoft Windows 7 или более поздних версий. Для обеспечения оптимальной среды разработки рекомендуется использовать Windows 10.

Копия Visual Studio. Сведения о скачивании и установке Visual Studio см. в этой статье. Когда вы запускаете установщик, убедитесь, что установлена рабочая нагрузка Разработка классических приложений на C++ . Не беспокойтесь, если вы не установили эту рабочую нагрузку при установке Visual Studio. Вы можете снова запустить установщик и установить ее сейчас.

Подробные сведения о рабочей нагрузке Разработка классических приложений на C++ в Visual Studio Installer.

Базовые значения об использовании интегрированной среды разработки Visual Studio. Если вы уже использовали классические приложения для Windows, вы, вероятно, справитесь. Общие сведения см. в обзоре возможностей интегрированной среды разработки Visual Studio.

Основные навыки владения языком C++. Не волнуйтесь, мы не будем делать ничего сложного.

создание проекта Windows классических приложений

чтобы создать первый проект Windows desktop, выполните следующие действия. в процессе работы вы вводите код рабочего Windows приложения. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.

создание проекта Windows desktop в Visual Studio 2019

В главном меню выберите Файл > Создать > Проект, чтобы открыть диалоговое окно Создание проекта.

в верхней части диалогового окна задайте для параметра язык значение C++, задайте для параметра платформа значение Windows и задайте для параметра Project тип значение рабочий стол.

в отфильтрованном списке типов проектов выберите мастер рабочего стола Windows , а затем нажмите кнопку далее. На следующей странице введите имя проекта, например десктопапп.

В Обозреватель решений щелкните правой кнопкой мыши проект Десктопапп , выберите Добавить, а затем выберите новый элемент.

снимок экрана: диалоговое окно "добавление нового элемента" в Visual Studio 2019 с установленным > Visual C и плюсом, а также параметр файла c плюсом/с выделенным.

Теперь проект создан и исходный файл открыт в редакторе. Чтобы продолжить, перейдите к созданию кода.

создание проекта Windows desktop в Visual Studio 2017

В меню Файл выберите команду Создать, а затем пункт Проект.

в левой области диалогового окна создание Project разверните узел установленные > Visual C++ и выберите пункт Windows рабочий стол. в средней области выберите мастер рабочего стола Windows.

снимок экрана: диалоговое окно "создание Project" в Visual Studio 2017 с установленным > Visual C плюс плюс > Windows рабочего стола, выбранный параметр "мастер настольных систем Windows" и десктопапп введено в текстовом поле "имя".

В Обозреватель решений щелкните правой кнопкой мыши проект Десктопапп , выберите Добавить, а затем выберите новый элемент.

снимок экрана: диалоговое окно "добавление нового элемента" в Visual Studio 2017 с установленным > Visual C и плюсом, а также параметр файла c плюсом/с выделенным.

Теперь проект создан и исходный файл открыт в редакторе. Чтобы продолжить, перейдите к созданию кода.

создание проекта Windows desktop в Visual Studio 2015

В меню Файл выберите команду Создать, а затем пункт Проект.

в левой области диалогового окна создание Project разверните узел установленные > шаблоны > Visual C++, а затем выберите пункт Win32. В средней области выберите шаблон Проект Win32.

снимок экрана: диалоговое окно "создание Project" в Visual Studio 2015 с установленными шаблонами > > Visual C плюс плюс > win32, выделенный параметр win32 Project и десктопапп, введенные в текстовом поле имя.

На странице Обзор мастера приложений Win32 нажмите кнопку Далее.

Создание Десктопапп на странице обзора мастера приложений Win32.

на странице Параметры приложений в разделе тип приложения выберите Windows приложение. В разделе Дополнительные параметры снимите флажок предкомпилированный заголовок, а затем выберите пустой проект. Чтобы создать проект, нажмите кнопку Готово.

В Обозреватель решений щелкните правой кнопкой мыши проект десктопапп, выберите Добавить, а затем выберите новый элемент.

снимок экрана: диалоговое окно "добавление нового элемента" в Visual Studio 2015 с установленным > Visual C и плюсом, а также параметр файла c плюсом/с выделенным.

Теперь проект создан и исходный файл открыт в редакторе.

Создание кода

далее вы узнаете, как создать код для Windows классического приложения в Visual Studio.

Запуск классического приложения Windows

точно так же, как у каждого приложения C и C++ должна быть main функция в качестве начальной точки, каждое Windows классическое приложение должно иметь WinMain функцию. WinMain имеет следующий синтаксис:

Сведения о параметрах и возвращаемом значении этой функции см. в разделе WinMain Entry Point.

Что такое дополнительные слова, такие как, или, или WINAPI CALLBACK HINSTANCE _In_ ? традиционный API Windows использует определения типов и макросов препроцессора, чтобы изменялись некоторые сведения о типах и коде, зависящем от платформы, такие как соглашения о вызовах, __declspec объявления и директивы pragma компилятора. в Visual Studio можно использовать функцию " быстрые сведения " IntelliSense, чтобы увидеть, что определяются этими определениями и макросами. Наведите указатель мыши на интересующую слово или выберите его и нажмите клавиши CTRL + K, CTRL + I для небольшого всплывающего окна, содержащего определение. Дополнительные сведения см. в разделе Using IntelliSense. Параметры и возвращаемые типы часто используют аннотации SAL , чтобы помочь в перехвате ошибок программирования. Дополнительные сведения см. в разделе Использование аннотаций SAL для сокращения числа дефектов кода C/C++.

для Windows настольных приложений требуется <> Windows. h. <в файле Tchar. h> определен TCHAR макрос, который в конечном итоге разрешается в, wchar_t Если в проекте ОПРЕДЕЛЕН символ Юникода, в противном случае — значение char . Если вы всегда создаете Юникод с включенным параметром UNICODE, то не нужно использовать TCHAR и может быть просто использоваться wchar_t напрямую.

наряду с WinMain функцией, каждое Windows классическое приложение также должно иметь функцию window-procedure. Эта функция обычно называется WndProc , но вы можете назвать ее по своему усмотрению. WndProc имеет следующий синтаксис:

Дополнительные сведения см. в разделе Процедуры окна.

Добавление функциональных возможностей в функцию WinMain

В WinMain функции вы заполняете структуру типа вндклассекс. Структура содержит сведения о окне: значок приложения, цвет фона окна, имя, отображаемое в строке заголовка, помимо прочего. Важно, что он содержит указатель на функцию окна. В приведенном ниже примере показана типичная структура WNDCLASSEX .

Дополнительные сведения о полях приведенной выше структуры см. в разделе вндклассекс.

Теперь можно создать окно. Используйте функцию CreateWindowEx .

Эта функция возвращает объект HWND , который является обработчиком окна. маркер похож на указатель, который Windows использует для наблюдения за открытыми окнами. Дополнительные сведения см. в разделе Типы данных Windows.

на этом этапе окно было создано, но нам по-прежнему нужно сообщить Windows, чтобы сделать его видимым. Вот что делает этот код:

На этом этапе функция WinMain должна напоминать приведенный ниже код.

Добавление функциональных возможностей в функцию WndProc

HDC в коде — это обработчик контекста устройства, который используется для рисования в клиентской области окна. Используйте BeginPaint функции и EndPaint для подготовки и завершения рисования в клиентской области. BeginPaint Возвращает маркер контекста устройства отображения, используемый для рисования в клиентской области. EndPaint завершает запрос на рисование и освобождает контекст устройства.

Сборка кода

Как обещано, вот полный код для рабочего приложения.

Сборка примера

Удалите код, введенный в хелловиндовсдесктоп. cpp в редакторе. Скопируйте этот пример кода и вставьте его в хелловиндовсдесктоп. cpp:

В меню Построение выберите Построить решение. Результаты компиляции должны появиться в окне вывод в Visual Studio.

Чтобы запустить приложение, нажмите клавишу F5. окно, содержащее текст "Hello, Windows desktop!" должно отображаться в левом верхнем углу экрана.

Снимок экрана выполняемого Project Десктопапп.

Поздравляем! вы выполнили это пошаговое руководство и создали традиционное Windows классическое приложение.

Зачем нужен и что делает windows.h ?
В какой-то библиотеке он включается следующим фрагментом:

И что за _WIN32, кем и в каком месте он определяется?
Если кто прокомментирует, буду премного благодарен.

Здравствуйте, Chelovek_, Вы писали:

C_> Зачем нужен и что делает windows.h ?
C_> В какой-то библиотеке он включается следующим фрагментом:

А макрос _WIN32 генерируется компилятором, и говорит о том какая версия операционной системы используется.
_WIN16 — 16-ти разрядная
_WIN32 — 32-х разрядная

и вообще макрос _WIN?? говорит о том что используются винды.

Хорошо иметь достойных потомков, но слава принадлежит нашим предкам. (Плутарх)

C_>> Зачем нужен и что делает windows.h ?
C_>> В какой-то библиотеке он включается следующим фрагментом:
T>Windows.h нужен для того, что бы ты мог использовать в своей программе функционал, предоставляемый операционной системой (Windows 95, 98, NT, 2000, XP).

Еще раз спасибо. А можно сказать компилятору (в настройках каких-нибудь), чтобы он этот макрос не генерировал? (чисто теоретически, на практике понятно, что он много кому может быть нужен).

От: jazzer Skype: enerjazzer
Дата: 21.07.05 10:32
Оценка:

Здравствуйте, Chelovek_, Вы писали:

C_>>> Зачем нужен и что делает windows.h ?
C_>>> В какой-то библиотеке он включается следующим фрагментом:
T>>Windows.h нужен для того, что бы ты мог использовать в своей программе функционал, предоставляемый операционной системой (Windows 95, 98, NT, 2000, XP).

C_> Спасибо. А не могли бы пояснить (пример какой-нибудь), что такое функционал, предоставляемый Windows ?
C_> Например, если программа работет в консольном режиме и занимается вычислениями, она все равно использует какие-то услуги из Windows.h ?

имеется в виду явное использование. То, что его рантайм использует неявно, тебя не должно волновать.

C_> Еще раз спасибо. А можно сказать компилятору (в настройках каких-нибудь), чтобы он этот макрос не генерировал? (чисто теоретически, на практике понятно, что он много кому может быть нужен).

См. документацию к твоему компилятору.

А не могли бы пояснить (пример какой-нибудь), что такое функционал, предоставляемый Windows ?
Например, если программа работет в консольном режиме и занимается вычислениями, она все равно использует какие-то услуги из Windows.h ?

Там содержаться типы, выходящие за рамки стандарта C++ и использующиеся в Windows: HANDLE, HWND, UMSG итд.
Так же там содержаться определения части системных функций и структур — CreateWindowA() и прочие.

Если программы ТОЛЬКО считает — тоесть не требует от ползователя ввода и ничего никуда не выводит, например:


То для такой программы Windows.h включать не обязательно. А вот как только нужно вывести на экран диалог с помошью MessageBox() — сразу же придется. Бо в стандарте C++ никакого MessageBox() не предусмотрено

КАК быстро освоить API?

Чтобы понять что мы будем изучать, предлагаю вам на минутку перенестись в далёкие 80-ые годы теперь уже прошлого века! То были времена безраздельного правления злого волшебника DOSa. До появления доброй феи - оконной оболочки Windows труд угнетённых программистов был тяжёлым и рутинным. Подобно рудокопам, пробивающим себе дорогу в каменной породе железными молотками, писали они свои программы. Большинство программ - утилиты, базы данных, информационные системы - создавались тогда в текстовом режиме - унылом и беспросветном, где существует только 16 цветов и где экран - крохотное поле 80X25 символов. Те же смельчаки, которые решались предоставить пользователю графический интерфейс, были настоящими героями.
Почему? Ну, во-первых, никаких специальных функций для работы с графикой в DOS не было и в помине, и практически каждому разработчику приходилось либо писать свои собственные библиотеки или классы для работы с графикой, каждый раз изобретая велосипед, либо использвать те, что создали его коллеги. Это был тихий ужас! Писать графические функции приходилось чуть ли не не ассмеблере, генерируя 10-й вектор прерывания. И вот печальный итог - каждая фирма создавала свои библиотеки шрифтов, картинок и элементов управления. И каждый раз, проектируя новую программу, приходилось возвращаться к той самой печке и заново придумывать интерфейс пользователя. Представьте себе, что не было никаких стандартов, и каждый программист делал интерфейс, как Бог на душу пошлёт. Так это хорошо! - Скажете вы, - никто не зависел от стандартов, навязанных Microsoft, было простор для творчества. Так-то оно так, только программисты, которые пишут непонятные программы, отвечают, что они никакие не дизайнеры и проектировать интерфейс пользователя не их задача. В результате, очень часто программы ещё худо-бедно работали, но работать в них было сущим мучением.
Бедный пользователь был вынужден каждый раз тратить драгоценное время, чтобы понять - что же программист хотел этим сказать, когда сделал именно такие кнопки и, простите, как всё это работает?

Разработчикам игр было хуже всех. Для того, чтобы написать такую игру, как DOOM, надо было опускаться к самым низам и программировать уже не столько DOS, сколько железо, напрямую обращаясь к видеопамяти PCI видеокарты - иначе не будет быстродействия, ведь тормозит обычно графика. А если вспомнить, что в составе MS-DOS никогда не было никаких драйверов, то приходилось учитывать все популярные на тот момент видеокарты, программируя графику для каждого типа отдельно, чтобы потом игра вообще пошла! Может быть вы помните те времена, когда приходилось вручную указывать тип видеокарты, а для звуковой карты указывать IRQ, DMA и количество каналов? Какой пользователь может это знать?

С появлением Windows появилась прекрасная возможность сосредоточить свои силы не столько на внешнем обрамлении программы - кнопках, флажках и меню, сколько на её содержании, сути - том, что она реально делает. Это на самом деле важно, так как труд программистов занимает много времени, а значит, стоит больших затрат. Для разработчиков на языке СИ была написана обширная библиотека windows.h, включавшая в себя всю поднаготную Windows и позволявшая в значительной степени унифицировать процесс разработки. А следовательно, и снизить затраты на разработку ПО. Всю эту огромную спецификацию программирования под Windows назвали API (Application Programming Interface) - интерфейс прикладного программирования.
API покрывает собой всё - графику, элементы управления, системные функции, работу с устройствами и ещё многое другое. По сути, API функции это промежуточно звено между пользователем и ядром операционной системы. При работе программы API функции превращаются в системные вызовы и обрабатываются ядром ОС. Ядро в свою очередь позволяет скрыть от программиста всё железо, представляя всё hardware, как виртуальные устройства - виртуальную видеокарту, виртуальный монитор, виртуальный принтер.

Время шло, и компанией Microsoft была разработана библиотека классов MFC (Microsoft Foundation Classes), а компанией Borland OWL (Object Window Library), облачившие API в объектно-ориентированный вид. Теперь уже никто не программирует окна и графику на процедурном API с нуля, для этого есть другие, более универсальные средства. Но несмотря на это, до сих пор API поддерживается всеми библиотеками классов и очень широко используется. Ни одна библиотека классов не включает в себя всех API-функций. Очень часто разработчики решают за нас - что нам нужно, а без чего мы обойдёмся. Всегда, когда под рукой нет нужного средства, на помощь приходят API-функции. И если вы хотите, чтобы программа работала быстрее, а выполнимый файл занимал меньше места, не ленитесь использовать API-функции.
Ежегодно спецификация API пополняется новыми функциями, которые внедряются в систему с помощью патчей и сервисных пакетов. С каждой новой версией Windows, API разрастается в геометрической прогрессии, и выпускаемые по ней спецификации выглядят уже, как многотомные энциклопедии. Это основа-основ Windows. Используя нужные API-функции, вы всегда сможете сделать в всё, что захотите. Windows станет для вас ласковым ручным котёнком. Вы сможете рисовать на экране всё, что захотите, и самое удивительное - это будет работать!

В последнее время выходит великое множество литературы, посвящённой "интересным возможностям Windows", вроде "Windows глазами хаккера" или "Прикольные штучки для Windows", "Как напугать пользователя". Большинство исходных текстов в них написано именно на API.

Поскольку мы только начинаем изучение программирования для Windows, процедурный API-код подойдёт нам как нельзя лучше. Он поможет понять механизм программирования для Windows, даст нам базовые знания об этой операционной системе, её принципах и механизмах, подготовив в полной мере к изучению библиотек классов MFC и VCL. Изучив работу элементов управления, мы рассмотрим некоторые неочевидные на первый взгляд возможности Windows, заглянув за ту самую запретную черту, куда можно попасть только зная язык API.


КАК можно обойтись только windows.h?

Разработчики Windows в своё время явно погорячились, когда решили, что программист обойдётся одним единственным библиотечным файлом. Сначала было всё ничего, но он стал разрастаться и если бы вы его решили распечатать, вам пришлось бы сразу купить новый картридж для принтера и толстенную пачку бумаги. С каждой новой версией Windows число API функций всё прибывало, росло число структур, макросов и типов данных. На сегодняшний день windows.h включает в себя более 1000 одних только констант.

А кроме того, прототипы ВСЕХ API-функций. Что было делать? Современный файл windows.h разделили на 3 составляющих по назначению: kernel, user и gdi. Теперь эти файлы носят такие названия:

winuser.h - объявления из модуля USER.EXE или ассоциированые с ним
wingdi.h - интерфейс графических устройств (GDI), работа с графикой
windef.h - определение фундаментальных типов данных
winnls.h - поддержка национального языка в локализованных версиях
wincon.h - консольный ввод-вывод, минующий интерфейс графических устройств
winbase.h - базовый программный интерфейс.
и другие.

В любом случае, к API-программе придётся подключать только windows.h. И это большой плюс. В программировании под DOS приходилось отдельно подключать библиотеку для работы со строками string.h, графическую библиотеку graphics.h, библиотеку ввода-вывода stdio.h. Windows.h "знает" не только все API-функции, но кроме того ещё и все функции языка СИ, которые мы использовали раньше. Многие библиотеки, которые в DOS актуальны, с началом программирования для Windows сразу отошли в мир иной это:: graphics.h, dir.h, stdio.h, conio.h, stdlib.h, process.h, dos.h. Не скоро теперь они встретятся нам на пути!

Файл windows.h существует до сих пор и пополняется новыми функциями и обновляется с каждой новой версией Visual Studio. При использовании библиотек классов MFC вы не будете его подключать, но только потому, что он уже подключён. В первых программах на API мы будем использовать именно его.

Читайте также: