Программирование в среде 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 бит Без знака
Читайте также:  Верстка многостраничных документов word

Как видите, в этих типах имеется определенная избыточность. Некоторые из этих перекрытий просто связаны с историей 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 см. в нашем индексе функций и технологий.

Связанные темы

Обратная связь

Были ли сведения на этой странице полезными?

Источник

Оцените статью