Убрать видимую кнопку закрытия в заголовке стандартного окна Win32 и сделать команду закрытия недоступной — разные задачи. Кнопка связана с системным меню окна, поэтому решение зависит от того, нужно ли сохранять остальные элементы управления окном.
Удаление и отключение
Если убрать стиль WS_SYSMENU, это удалит системное меню, но вместе с ним исчезнут и стандартные кнопки сворачивания и разворачивания. Это не позволяет точечно скрыть только кнопку «Закрыть».
Если нужно сохранить системное меню и другие кнопки, можно просто отключить команду закрытия SC_CLOSE в существующем меню окна. Пример вызовов для уже созданного корректного дескриптора окна (hwnd):
HMENU menu = GetSystemMenu(hwnd, FALSE);
EnableMenuItem(menu, SC_CLOSE, MF_DISABLED);
Этот фрагмент работает с системным меню: он делает пункт «Закрыть» недоступным в меню и визуально блокирует соответствующую команду. Это не полноценный проект окна и не защищает процесс от завершения иными средствами (например, через диспетчер задач).
Сохранение понятного поведения
По возможности не лишайте пользователя привычного способа закрыть окно. Если выполнение операции требует ожидания или блокирует закрытие, интерфейс должен явно информировать об этом. Альтернативный вариант — собственный заголовок и элементы управления окна, который даёт больше гибкости, но возлагает на приложение ответственность за корректное поведение, доступность и ожидаемые элементы управления.