Как создать win32 project в visual studio 2019

Как создать win32 project в visual studio 2019

Разработка приложений Win32 в Visual Studio 2019 требует точной настройки проекта с учётом особенностей API и конфигурации среды. Правильный выбор шаблона и параметров компиляции позволяет избежать множества ошибок на этапе компоновки и запуска.

При создании нового проекта необходимо выбрать шаблон «Windows Desktop Application (C++)», доступный в разделе «Create a new project». В окне конфигурации важно установить тип проекта как «Windows Application» и отключить предкомпилированные заголовки, если предполагается ручное управление зависимостями.

В параметрах конфигурации следует указать стандарт C++17 или выше через Project Properties → C/C++ → Language → C++ Language Standard. Для проектов Win32 также рекомендуется явно указать Character Set как «Use Multi-Byte Character Set», если взаимодействие с функциями WinAPI идёт через ANSI-варианты.

По умолчанию Visual Studio создаёт пустой шаблон, не содержащий WinMain. Вручную добавьте файл с точкой входа, где инициализируется окно и запускается цикл обработки сообщений. Для базового окна достаточно зарегистрировать класс окна через RegisterClassEx и создать его с помощью CreateWindowEx.

Рекомендовано сразу настроить набор опций компоновщика: Subsystem = Windows, Entry Point = WinMainCRTStartup и отключить Incremental Linking для релизной сборки. Это обеспечит корректную компиляцию и запуск программы на целевой системе без лишних зависимостей.

Выбор шаблона Win32 при создании нового проекта

Выбор шаблона Win32 при создании нового проекта

В Visual Studio 2019 при создании проекта выберите категорию Desktop Development with C++, затем нажмите Создать новый проект. В открывшемся списке шаблонов найдите Win32 Console Application или Windows Desktop Application – различие между ними принципиальное.

Windows Desktop Application запускает мастер настройки, где можно задать создание окна, включение поддержки GDI, меню, ресурсов и MFC. Если вы планируете разработку полноценного оконного приложения с пользовательским интерфейсом, выбирайте этот шаблон.

Обратите внимание: не включайте Precompiled Header, если проект небольшой или вы планируете точный контроль над зависимостями. Для учебных целей лучше отключить все опции автоматической генерации кода, включая поддержку безопасных функций и SDL (Security Development Lifecycle), чтобы упростить структуру проекта.

После выбора шаблона нажмите Далее и убедитесь, что Configuration установлена в Empty project, если нужен минимальный скелет без лишнего кода. Это упростит понимание структуры Win32-приложения и позволит вручную управлять точкой входа, ресурсами и зависимостями.

Настройка параметров проекта до генерации кода

После создания проекта Win32 в Visual Studio 2019 необходимо сразу настроить ключевые параметры, чтобы избежать ошибок компиляции и сэкономить время при отладке.

1. Установка целевой платформы
Откройте свойства проекта через пункт Project → Properties. В разделе Configuration Properties → General укажите Windows SDK Version, совместимую с вашей системой, например, 10.0.19041.0. Убедитесь, что Platform Toolset установлен в значение v142 для Visual Studio 2019.

2. Настройка типа подсистемы
В разделе Linker → System установите Subsystem в значение Windows (/SUBSYSTEM:WINDOWS) для GUI-приложений или Console (/SUBSYSTEM:CONSOLE) для консольных. Это напрямую влияет на точку входа в приложение.

3. Отключение ненужных библиотек
В Linker → Input в параметре Ignore Specific Default Libraries добавьте libcmt.lib или другие, если используете собственную сборку CRT. Это предотвращает конфликты при линковке.

4. Настройка стандартов языка
В C/C++ → Language параметр C++ Language Standard установите в ISO C++17 Standard (/std:c++17) или выше, чтобы использовать современные возможности языка.

5. Управление отладочной информацией
В C/C++ → General убедитесь, что Debug Information Format задан как Program Database (/Zi). Это обеспечит корректную работу отладчика.

6. Оптимизация путей к заголовочным и библиотечным файлам
В VC++ Directories укажите точные пути к пользовательским библиотекам в Include Directories и Library Directories. Избегайте абсолютных путей, чтобы проект был переносим.

7. Установка точки входа
Если используется нестандартная функция входа, в Linker → Advanced укажите её в Entry Point, например WinMainCRTStartup.

Правильная конфигурация этих параметров позволяет избежать большинства ошибок компиляции и линковки, а также обеспечивает стабильную работу проекта до начала написания кода.

Добавление поддержки оконного интерфейса в мастере

При создании нового проекта Win32 в Visual Studio 2019 выберите шаблон «Win32 Project», затем нажмите «Далее». В открывшемся окне установите имя проекта и путь. Нажмите «Создать».

На этапе мастера конфигурации проекта активируйте чекбокс «Application type: Windows application». В блоке «Additional options» отметьте «Empty project», чтобы исключить автоматическое добавление ненужного кода. Нажмите «Finish».

Щёлкните правой кнопкой мыши по проекту в обозревателе решений, выберите «Добавить» → «Новый элемент», затем «C++ File (.cpp)». Назовите файл, например, main.cpp.

Добавьте в созданный файл следующий код для реализации простого оконного интерфейса:

#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) {
const wchar_t CLASS_NAME[] = L"MyWindowClass";
WNDCLASS wc = {};
wc.lpfnWndProc   = WndProc;
wc.hInstance     = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);
HWND hwnd = CreateWindowEx(
0,
CLASS_NAME,
L"Простое окно",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
nullptr, nullptr, hInstance, nullptr
);
if (!hwnd) return 0;
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
MSG msg = {};
while (GetMessage(&msg, nullptr, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

Убедитесь, что в настройках проекта выбран компилятор x86 или x64 в зависимости от целевой платформы. Компиляция и запуск создадут базовое окно с поддержкой системных сообщений. Это минимальная реализация оконного интерфейса в Win32 API.

Структура сгенерированных файлов и их назначение

Структура сгенерированных файлов и их назначение

При создании проекта Win32 в Visual Studio 2019 с помощью мастера создаётся минимальный набор файлов, каждый из которых выполняет строго определённую функцию в процессе сборки и выполнения приложения.

ИмяПроекта.cpp – основной исходный файл, содержащий точку входа (функцию WinMain) и реализацию оконной процедуры. В нём задаются параметры окна, запускается цикл обработки сообщений и инициализируются ресурсы.

targetver.h – определяет минимальную версию Windows, с которой совместимо приложение. Используется для активации соответствующих API. Рекомендуется указывать конкретную версию, например _WIN32_WINNT_WIN10, чтобы избежать неопределённого поведения.

stdafx.h – файл предварительно компилируемых заголовков. Включает редко изменяемые заголовочные файлы (например, windows.h), что ускоряет компиляцию. Обязателен при включённой поддержке PCH (Precompiled Headers).

stdafx.cpp – исходник, необходимый для генерации предварительно компилируемого заголовка. Он должен быть первым в списке компиляции, иначе компилятор не создаст PCH-файл, и проект не соберётся.

resource.h – автоматически создаваемый файл с идентификаторами ресурсов. Используется для связи между ресурсами (меню, диалоги) и исходным кодом. Не редактируется вручную.

ИмяПроекта.rc – файл ресурсов. Описывает меню, иконки, курсоры и другие элементы интерфейса в текстовом виде. Изменяется через визуальный редактор или вручную при необходимости.

ReadMe.txt – краткое описание проекта. Не участвует в сборке, может быть удалён или заменён на техническую документацию.

ИмяПроекта.vcxproj и ИмяПроекта.vcxproj.filters – XML-файлы конфигурации проекта. Первый описывает параметры компиляции и ссылки, второй отвечает за организацию файлов в обозревателе решений. Редактировать вручную не рекомендуется.

Для оптимальной работы проекта важно не удалять и не переименовывать эти файлы без необходимости. При добавлении новых элементов (ресурсов, исходных файлов) следует использовать интерфейс Visual Studio, чтобы изменения корректно отражались во всех связанных компонентах.

Подключение и настройка Windows.h и других заголовков

Windows.h – основной заголовочный файл для работы с WinAPI. Его подключение осуществляется строго до любых других системных заголовков. Используйте следующую директиву:

#include <windows.h>

Перед его подключением рекомендуется задать макрос WIN32_LEAN_AND_MEAN, чтобы исключить редко используемые компоненты и ускорить компиляцию:

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

Для работы с окнами и сообщениями достаточно windows.h. Если используются расширения типа компонентного моделирования COM, подключите objbase.h и инициализируйте COM через CoInitialize или CoInitializeEx.

Для работы с графикой на низком уровне используйте wingdi.h. Он включается автоматически windows.h, но при использовании GDI+ потребуется явное подключение gdiplus.h и инициализация через GdiplusStartup.

Подключение commctrl.h необходимо при использовании элементов управления из библиотеки Common Controls. До его подключения обязательно задать макрос _WIN32_IE со значением не ниже 0x0500 для поддержки современных контролов.

Если используется shellapi.h (например, для ShellExecute), проверьте, что заданы нужные версии платформы с помощью _WIN32_WINNT. Например:

#define _WIN32_WINNT 0x0601

Убедитесь, что файл stdafx.h (если используется предварительная компиляция заголовков) содержит windows.h и другие заголовки до любых пользовательских или сторонних файлов. Это минимизирует конфликты и ошибки линковки.

Для исключения конфликтов имен не используйте using namespace std в глобальной области видимости при работе с Windows API, особенно в больших проектах.

Создание и регистрация оконного класса вручную

Создание и регистрация оконного класса вручную

Для создания окна в Win32-приложении необходимо вручную определить и зарегистрировать оконный класс. Это требует заполнения структуры WNDCLASSEX и вызова функции RegisterClassEx.

  1. Инициализация структуры WNDCLASSEX:
    • cbSize – размер структуры в байтах, должен быть равен sizeof(WNDCLASSEX).
    • style – стили класса, например, CS_HREDRAW | CS_VREDRAW для перерисовки при изменении размера.
    • lpfnWndProc – указатель на функцию обработки сообщений окна (WindowProc).
    • cbClsExtra и cbWndExtra – дополнительные байты памяти для класса и окна, обычно 0.
    • hInstance – дескриптор текущего приложения, передается в функцию WinMain.
    • hIcon – иконка окна, можно загрузить через LoadIcon или использовать стандартные иконки.
    • hCursor – курсор по умолчанию, например, LoadCursor(NULL, IDC_ARROW).
    • hbrBackground – кисть для заливки фона, часто (HBRUSH)(COLOR_WINDOW+1).
    • lpszMenuName – имя меню, если требуется, иначе NULL.
    • lpszClassName – уникальное имя оконного класса, используемое при создании окна.
    • hIconSm – маленькая иконка для панели задач, загружается отдельно.
  2. Регистрация класса:
    • Вызвать RegisterClassEx(&wndClass).
    • Проверить возвращаемое значение: при ошибке – получить код с помощью GetLastError().

Уникальность имени класса обязательна, иначе CreateWindowEx может создавать окно с неверным поведением. Для отладки рекомендуется использовать префиксы, например, имя приложения.

После успешной регистрации оконного класса можно создавать окна на его основе, передавая имя класса в CreateWindowEx.

Обработка сообщений окна в функции WndProc

Обработка сообщений окна в функции WndProc

WndProc – ключевая функция обработки сообщений окна в Win32-приложениях. Она принимает сообщения операционной системы и выполняет соответствующие действия, обеспечивая взаимодействие пользователя с приложением.

Функция имеет следующий прототип:

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

Где:

  • hwnd – дескриптор окна;
  • msg – идентификатор сообщения;
  • wParam, lParam – дополнительные параметры, зависящие от сообщения.

Основная задача WndProc – обработать нужные сообщения и вернуть корректное значение. Для необработанных сообщений вызывается стандартная функция DefWindowProc, что обеспечивает базовое поведение окна.

Рекомендуемые сообщения для обработки в WndProc:

  • WM_CREATE – инициализация ресурсов после создания окна;
  • WM_PAINT – перерисовка содержимого окна с использованием BeginPaint и EndPaint;
  • WM_COMMAND – обработка команд из меню, кнопок и других элементов управления;
  • WM_SIZE – изменение размера окна с возможностью подстройки элементов интерфейса;
  • WM_DESTROY – завершение работы приложения, вызов PostQuitMessage;
  • WM_CLOSE – реакция на закрытие окна, возможна дополнительная логика подтверждения.

При реализации WndProc важно:

  1. Чётко выделять обработку ключевых сообщений, избегая перегрузки функции.
  2. Использовать switch-case для удобочитаемости и быстрого расширения.
  3. Всегда возвращать значение, полученное от DefWindowProc, если сообщение не обработано явно.
  4. Учитывать особенности параметров wParam и lParam, различающиеся для каждого сообщения.

Пример обработки WM_PAINT:

case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// Рисование в hdc
EndPaint(hwnd, &ps);
return 0;
}

Это гарантирует корректное обновление окна и предотвращает появление артефактов.

Обработка WM_COMMAND требует проверки идентификатора команды в wParam, что позволяет различать источники событий:

case WM_COMMAND:
{
int wmId = LOWORD(wParam);
switch (wmId)
{
case ID_FILE_EXIT:
PostQuitMessage(0);
break;
// другие команды
}
return 0;
}

При грамотном структурировании WndProc обеспечивается стабильная работа приложения и простота сопровождения кода.

Вопрос-ответ:

Как создать новый проект Win32 в Visual Studio 2019?

Для создания проекта Win32 в Visual Studio 2019 нужно открыть программу, выбрать «Создать проект», затем найти шаблон «Win32» или «Win32 Console Application». После выбора шаблона укажите имя проекта и расположение, далее пройдите через мастер настройки, где можно выбрать тип приложения — например, консольное или с оконным интерфейсом. После завершения настроек проект будет готов к работе.

Какие основные настройки нужно указать при создании Win32 проекта в Visual Studio 2019?

При создании проекта Win32 важно выбрать тип приложения: консольное, оконное или DLL. Также можно настроить параметры безопасности, тип используемых библиотек и режим совместимости. В мастере создания проекта обычно предлагается выбрать, будет ли приложение пустым или с готовым шаблоном. Эти настройки влияют на начальный код и структуру проекта.

Можно ли использовать Visual Studio 2019 для разработки как 32-битных, так и 64-битных Win32 приложений?

Да, Visual Studio 2019 позволяет создавать и 32-битные, и 64-битные Win32 проекты. При настройке конфигурации сборки в проекте можно выбрать платформу: x86 для 32-битных приложений и x64 для 64-битных. Это влияет на компиляцию и запуск программ, позволяя создавать приложения под разные архитектуры процессоров.

Как подключить дополнительные библиотеки в проект Win32 в Visual Studio 2019?

Чтобы добавить внешние библиотеки в проект, необходимо открыть свойства проекта, перейти в раздел «Свойства конфигурации» → «Компоновщик» → «Ввод». Там в поле «Дополнительные зависимости» укажите имена файлов библиотек (.lib), которые хотите подключить. Кроме того, нужно указать путь к каталогам с заголовочными файлами и библиотеками в разделах «Свойства конфигурации» → «C/C++» → «Общие» (для заголовков) и «Компоновщик» → «Общие» (для библиотек).

Ссылка на основную публикацию