Include windows h что это

Обновлено: 30.06.2024

В этой статье будет рассмотрена самая простая программа для Windows. Она не выполняет никаких реальных действий: ее назначение заключается лишь в том, чтобы сразу после запуска завершить свою работу. Тем не менее на ее примере будут показаны самые базовые понятия программирования 32-разрядных Windows-приложений.

Разберем все строки программы по порядку. Начинается программа с включения в ее код заголовочного файла <Windows.h>: Это самый важный файл, подлючаемый к коду любой Windows-программы, так как содержит объявления функций, типов, констант, необходимых для программировании под Windows (строго говоря <Windows.h> ссылается на множество других заголовочных файлов, которые и содержат эти самые объявления).

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

ТипПрефиксПример имени
переменной
charсcFirst
unsigned charbybyCode
shortnnValue
intniResult
указательppObject
строкаszszLine
функцияfnfnDraw
Но помимо базовых, в заголовочых файлах содержатся объявления и других типов, широко используемых при программировании.

Программа «узнает» свой дескриптор, благодаря функции WinMain. Каждый раз, когда мы запускаем какое-либо приложение, Windows «находит» в исполняемом файле функцию WinMain и вызывает ее, передавая в качестве первого параметра дескриптор hInstance, который операционная система «присвоила» данной программе.

Второй параметр в 32-разрядных версиях Windows не используется (он сохранен лишь для совместимости с более ранними версиями операционной системы) и всегда равен нулю.

Возвращает функция значение типа int. В случае, если программа не создает окон (как наша), WinMain должна возвращать 0. Хотя фактически возвращаемое значение Windows игнорирует.

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

в этом пошаговом руководстве показано, как создать традиционное 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» (выделите мое):

"windows.h - это специфичный для Windows заголовочный файл для языков программирования C и C ++, который содержит объявления для всех функций в API Windows, всех распространенных макросов, используемых программистами Windows, и всех типов данных, используемых различными функциями и подсистем. Он определяет очень большое количество специфических функций Windows **, которые можно использовать в C. API Win32 можно добавить в проект программирования на C, включив файл заголовка и ссылки на соответствующие библиотеки . Чтобы использовать функции в xxxx.dll, программа должна быть связана с xxxx.lib (или libxxxx.dll.a в MinGW) . Некоторые заголовки связаны не с DLL, а со статическим библиотека (например, scrnsave.h нужен scrnsave.lib). "

Нужно ли включать заголовочный файл windows.h в мой проект C / C ++, если я хочу, чтобы мой исполняемый файл (который был создан для работы только в Windows) неявно взаимодействовал с / использовал WindowsAPI?

Или компилятор, который автоматически, если я не указал его еще и хочу получить доступ к WindowsAPI неявно?

Я не имею в виду явное использование функций, макросов или типов данных, определенных в windows.h . Скорее, если я хочу получить неявный доступ к компонентам WindowsAPI через оболочку, например с помощью cmd.exe или PowerShell.

2 ответа

Это относится не только к «Windows.h» с Win32 API, но и (почти) к любому заголовочному файлу, связанному с определенным API. Как правило, я бы сказал, что вам не нужно включать заголовок, пока он вам действительно не понадобится. И нужно ли вам это или нет в большинстве случаев указано в документации API.

Например, документация для CreateWindow говорит вам, что вам нужно include Windows.h

windows.h - это «суперзаголовок», включающий почти все мыслимые вещи. Отдельные части Win API также имеют свои собственные заголовки, так что вы также можете просто включить те, которые вас интересуют.

Зачем нужен и что делает 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() не предусмотрено

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