- Соглашения о написании кода Windows
- Определения типов
- Целочисленные типы
- Логический тип
- Типы указателей
- Типы точности указателя
- Венгерская нотация
- Get Started with Win32 and C++ (Приступая к работе с Win32 и C++)
- В этом разделе
- Обратная связь
- Начало работы с классическими приложениями для Windows, которые используют API Win32
- Подготовка
- Узнайте, как создавать классические приложения с помощью API Win32.
- Модернизация классических приложений для Windows 10
- C++/WinRT
- Новые возможности API Win32 в Windows 10
- Начало работы с функциями и технологиями Win32
- Связанные темы
- Обратная связь
Соглашения о написании кода Windows
Если вы не знакомы с программированием для Windows, это может быть смущает, когда вы впервые увидите программу Windows. Код заполняется странными определениями типов , такими как DWORD_PTR и LPRECT, а переменные имеют такие имена, как hWnd и pwsz (венгерская нотация). Стоит уделить некоторое время изучению некоторых соглашений о кодировании Windows.
Подавляющее большинство API Windows состоит из функций или интерфейсов COM. Очень немногие API Windows предоставляются в виде классов C++. (Заметным исключением является GDI+, один из интерфейсов API двухмерной графики.)
Определения типов
Заголовки Windows содержат много типов. Многие из них определены в файле заголовка WinDef.h. Вот некоторые из них, с которыми вы часто столкнетесь.
Целочисленные типы
Тип данных | Размер | Подписал? |
---|---|---|
BYTE | 8 бит | Без знака |
DWORD | 32 бита | Без знака |
INT32 | 32 бита | Со знаком |
INT64 | 64 бита | Со знаком |
LONG | 32 бита | Со знаком |
LONGLONG | 64 бита | Со знаком |
UINT32 | 32 бита | Без знака |
UINT64 | 64 бита | Без знака |
ULONG | 32 бита | Без знака |
ULONGLONG | 64 бита | Без знака |
WORD | 16 бит | Без знака |
Как видите, в этих типах имеется определенная избыточность. Некоторые из этих перекрытий просто связаны с историей API Windows. Перечисленные здесь типы имеют фиксированный размер, а размеры одинаковы как в 32-разрядных, так и в 64-разрядных приложениях. Например, тип DWORD всегда имеет ширину 32 бита.
Логический тип
BOOL — это псевдоним типа для int, отличный от bool C++, а также от других типов, представляющих логическое значение. Файл заголовка WinDef.h также определяет два значения для использования с BOOL.
#define FALSE 0 #define TRUE 1
Однако, несмотря на это определение TRUE, большинство функций, возвращающих тип BOOL , могут возвращать любое ненулевое значение, указывающее логическую истину. Поэтому всегда следует писать следующее:
// Right way. if (SomeFunctionThatReturnsBoolean()) < . >// or if (SomeFunctionThatReturnsBoolean() != FALSE)
BOOL — это целочисленный тип, который не является взаимозаменяемым с логическим значением C++.
Типы указателей
Windows определяет множество типов данных формы, указывающих на X. Обычно они имеют префикс P- или LP- в имени. Например, LPRECT — это указатель на RECT, где RECT — это структура, описывающая прямоугольник. Следующие объявления переменных эквивалентны.
RECT* rect; // Pointer to a RECT structure. LPRECT rect; // The same PRECT rect; // Also the same.
В 16-разрядных архитектурах (16-разрядная версия Windows) существует 2 типа указателей: P — «указатель», а LP — «длинный указатель». Длинные указатели (также называемые дальними указателями) были необходимы для обращения к диапазонам памяти за пределами текущего сегмента. Префикс LP был сохранен, чтобы упростить перенос 16-разрядного кода в 32-разрядную версию Windows. Сегодня различий нет, и все эти типы указателей эквивалентны. Избегайте использования этих префиксов; или, если вы должны использовать один, используйте P.
Типы точности указателя
Следующие типы данных всегда имеют размер указателя, то есть 32 бита в ширину в 32-разрядных приложениях и 64 бита в ширину в 64-разрядных приложениях. Размер определяется во время компиляции. Если 32-разрядное приложение работает в 64-разрядной версии Windows, эти типы данных по-прежнему имеют ширину 4 байта. (64-разрядное приложение не может работать в 32-разрядной версии Windows, поэтому обратная ситуация не возникает.)
Эти типы используются в ситуациях, когда целое число может быть приведено к указателю. Они также используются для определения переменных для арифметики указателя и для определения счетчиков цикла, которые выполняют итерацию по всему диапазону байтов в буферах памяти. В более общем случае они появляются в местах, где существующее 32-разрядное значение было расширено до 64 бит в 64-разрядной версии Windows.
Венгерская нотация
Венгерская нотация — это практика добавления префиксов к именам переменных для получения дополнительных сведений о переменной. (Изобретатель нотации, Чарльз Simonyi, был венгерским, отсюда и ее название).
В первоначальном виде венгерская нотация предоставляет семантическую информацию о переменной, сообщая о предполагаемом использовании. Например, i означает индекс, cb означает размер в байтах («количество байтов»), а rw и col — средние номера строк и столбцов. Эти префиксы предназначены для предотвращения случайного использования переменной в неправильном контексте. Например, если бы вы увидели выражение rwPosition + cbTable , вы бы знали, что номер строки добавляется к размеру, что почти наверняка является ошибкой в коде.
Более распространенная форма венгерской нотации использует префиксы для предоставления сведений о типе , например dw для DWORD и w для WORD.
Основные рекомендации C++ не рекомендуют нотацию префикса (например, венгерскую нотацию). См . раздел NL.5. Избегайте сведений о типе кодирования в именах. На внутреннем сервере команда Windows больше не использует его. Но его использование остается в примерах и документации.
Get Started with Win32 and C++ (Приступая к работе с Win32 и C++)
Цель этой серии — научить вас писать классическую программу на C++ с помощью WIN32 и COM API.
В первом модуле вы узнаете, как создать и отобразить окно. В последующих модулях представлена модель COM, графика и текст, а также ввод данных пользователем.
Для этой серии предполагается, что у вас есть хорошие знания о программировании на C++. Предыдущий опыт программирования для Windows не предполагается. Если вы не знакомы с C++, учебные материалы доступны в документации по языку C++.
В этом разделе
Раздел | Описание |
---|---|
Введение в программирование Win32 на C++ | В этом разделе описываются некоторые основные термины и соглашения о кодировании, используемые в программировании для Windows. |
Модуль 1. Ваша первая программа Windows | В этом модуле вы создадите простую программу Для Windows, отображающую пустое окно. |
Модуль 2. Использование COM в программе Windows | В этом модуле представлена модель COM, которая лежит в основе многих современных API Windows. |
Модуль 3. Графика Windows | В этом модуле представлена графическая архитектура Windows с акцентом на Direct2D. |
Модуль 4. Ввод данных пользователем | В этом модуле описывается ввод с помощью мыши и клавиатуры. |
Образец кода | Содержит ссылки для скачивания примера кода для этой серии. |
Обратная связь
Были ли сведения на этой странице полезными?
Начало работы с классическими приложениями для Windows, которые используют API Win32
Win32 API (также называемый Windows API) — это исходная платформа для собственных Windows-приложений на языке C/C++, которым требуется прямой доступ к Windows и оборудованию. Он обеспечивает первоклассный опыт разработки без зависимости от управляемой среды выполнения, такой как .NET и WinRT (для приложений UWP для Windows 10). Благодаря этому API Win32 стает оптимальной платформой для приложений, которым требуется самый высокий уровень производительности и прямой доступ к системному оборудованию.
В этой документации описывается создание классических приложений Windows с помощью API Win32. API Win32 — это одна из нескольких платформ приложений, которые можно использовать для создания классических приложений для Windows. Дополнительные сведения о других платформах приложений см. в разделе Выбор платформы.
Подготовка
Следуйте этим инструкциям и начните создавать классические приложения для Windows 10, использующих API Win32.
- Скачайте или обновите Visual Studio 2019. Если у вас еще нет Visual Studio 2019, вы можете установить бесплатную среду Microsoft Visual Studio Community 2019. При установке Visual Studio обязательно выберите вариант Разработка классических приложений на C++ . Ссылки для скачивания см. на странице загрузок .
Примечание При установке Visual Studio при необходимости можно выбрать варианты разработки классических приложений .NET и универсальная платформа Windows для доступа к другим типам проектов и платформам приложений для создания классических приложений для Windows.
Для сценариев, которые можно использовать для настройки компьютера разработки и установки других компонентов или пакетов, проверка этот проект GitHub.
Узнайте, как создавать классические приложения с помощью API Win32.
Если вы не знакомы с созданием классических приложений с помощью API Win32, ознакомьтесь со следующими руководствами и статьями.
Раздел | Описание |
---|---|
Создание первого приложения C++ Win32 | В этом руководстве описано, как написать программу Windows на C++ с помощью Win32 и API COM. |
Создание первого приложения с помощью DirectX | Это базовое руководство поможет вам приступить к разработке приложений DirectX. |
Руководство по программированию для 64-разрядных версий Windows | Описывает программирование для 64-разрядных версий операционной системы Windows. |
Использование заголовков Windows | Общие сведения о некоторых соглашениях, используемых в файлах заголовков Windows. |
Модернизация классических приложений для Windows 10
Если у вас есть классическое приложение Win32, в универсальная платформа Windows (UWP) есть множество функций, которые можно использовать для обеспечения наилучшего взаимодействия с Windows 10. Например, начиная с Windows 10 версии 1903, элементы управления UWP XAML можно размещать в классическом приложении Win32 с помощью функции XAML Islands.
Большинство этих функций UWP доступны в виде модульных компонентов, которые вы можете внедрить в классическое приложение в собственном темпе без необходимости переписывать все приложение. Вы можете улучшить существующее классическое приложение, выбрав части Windows 10 и UWP для внедрения.
C++/WinRT
При необходимости можно настроить компьютер разработки для использования C++/WinRT. C++/WinRT — это полностью стандартная современная проекция языка C++17, которая позволяет легко использовать среда выполнения Windows API среда выполнения Windows API (WinRT) из классического приложения Win32 на C++. C++/WinRT реализован в виде библиотеки на основе файлов заголовков.
Чтобы настроить C++/WinRT для проекта, сделайте следующее:
- Для новых проектов можно установить расширение C++/WinRT Visual Studio (VSIX) и использовать один из шаблонов проектов C++/WinRT, входящих в это расширение.
- Для существующих проектов классических приложений Windows в проекте можно установить пакет NuGet Microsoft.Windows.CppWinRT .
Дополнительные сведения об этом варианте см. в этой статье.
Новые возможности API Win32 в Windows 10
Сведения о новых API-интерфейсах Win32, появившиеся в Windows 10, см. в статье Новые возможности.
Начало работы с функциями и технологиями Win32
API Win32 существуют для многих функций и технологий в Windows 10, включая основные интерфейсы пользовательского интерфейса и API окон, аудио и графики, а также сети. Рекомендации и примеры кода по использованию этих API см. в нашем индексе функций и технологий.
Связанные темы
Обратная связь
Были ли сведения на этой странице полезными?