Include windows h что это
В этой статье будет рассмотрена самая простая программа для Windows. Она не выполняет никаких реальных действий: ее назначение заключается лишь в том, чтобы сразу после запуска завершить свою работу. Тем не менее на ее примере будут показаны самые базовые понятия программирования 32-разрядных Windows-приложений.
Разберем все строки программы по порядку. Начинается программа с включения в ее код заголовочного файла <Windows.h>: Это самый важный файл, подлючаемый к коду любой Windows-программы, так как содержит объявления функций, типов, констант, необходимых для программировании под Windows (строго говоря <Windows.h> ссылается на множество других заголовочных файлов, которые и содержат эти самые объявления).
При программировании под Windows обычно к именам переменных применяют так называемую венгерскую нотацию. Ее смысл заключается в том, что в начале названия переменной помещают префикс, который показывает, какой тип имеет переменная. Это делается для того, чтобы при написании программы всегда знать с переменной какого типа имеешь дело, что заранее позволяет избежать ошибок. Вообще же венгерскую нотацию вы можете и не использовать. Ниже приведены примеры для некоторых типов переменных:
Тип | Префикс | Пример имени переменной |
---|---|---|
char | с | cFirst |
unsigned char | by | byCode |
short | n | nValue |
int | n | iResult |
указатель | p | pObject |
строка | sz | szLine |
функция | fn | fnDraw |
Программа «узнает» свой дескриптор, благодаря функции 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. Вы можете снова запустить установщик и установить ее сейчас.
Базовые значения об использовании интегрированной среды разработки Visual Studio. Если вы уже использовали классические приложения для Windows, вы, вероятно, справитесь. Общие сведения см. в обзоре возможностей интегрированной среды разработки Visual Studio.
Основные навыки владения языком C++. Не волнуйтесь, мы не будем делать ничего сложного.
создание проекта Windows классических приложений
чтобы создать первый проект Windows desktop, выполните следующие действия. в процессе работы вы вводите код рабочего Windows приложения. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.
создание проекта Windows desktop в Visual Studio 2019
В главном меню выберите Файл > Создать > Проект, чтобы открыть диалоговое окно Создание проекта.
в верхней части диалогового окна задайте для параметра язык значение C++, задайте для параметра платформа значение Windows и задайте для параметра Project тип значение рабочий стол.
в отфильтрованном списке типов проектов выберите мастер рабочего стола Windows , а затем нажмите кнопку далее. На следующей странице введите имя проекта, например десктопапп.
В Обозреватель решений щелкните правой кнопкой мыши проект Десктопапп , выберите Добавить, а затем выберите новый элемент.
Теперь проект создан и исходный файл открыт в редакторе. Чтобы продолжить, перейдите к созданию кода.
создание проекта Windows desktop в Visual Studio 2017
В меню Файл выберите команду Создать, а затем пункт Проект.
в левой области диалогового окна создание Project разверните узел установленные > Visual C++ и выберите пункт Windows рабочий стол. в средней области выберите мастер рабочего стола Windows.
В Обозреватель решений щелкните правой кнопкой мыши проект Десктопапп , выберите Добавить, а затем выберите новый элемент.
Теперь проект создан и исходный файл открыт в редакторе. Чтобы продолжить, перейдите к созданию кода.
создание проекта Windows desktop в Visual Studio 2015
В меню Файл выберите команду Создать, а затем пункт Проект.
в левой области диалогового окна создание Project разверните узел установленные > шаблоны > Visual C++, а затем выберите пункт Win32. В средней области выберите шаблон Проект Win32.
На странице Обзор мастера приложений Win32 нажмите кнопку Далее.
на странице Параметры приложений в разделе тип приложения выберите Windows приложение. В разделе Дополнительные параметры снимите флажок предкомпилированный заголовок, а затем выберите пустой проект. Чтобы создать проект, нажмите кнопку Готово.
В Обозреватель решений щелкните правой кнопкой мыши проект десктопапп, выберите Добавить, а затем выберите новый элемент.
Теперь проект создан и исходный файл открыт в редакторе.
Создание кода
далее вы узнаете, как создать код для 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!" должно отображаться в левом верхнем углу экрана.
Поздравляем! вы выполнили это пошаговое руководство и создали традиционное 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() не предусмотрено
Читайте также: