Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Гайд [Сурс] DirectX 11 External ImGui Menu — База для отрисовки оверлея

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
600
Реакции
16
Наткнулся на полезную базу для тех, кто хочет пересесть с internal-паст на полноценные внешние решения. Основная проблема новичков при создании External меню на DX11 — это правильная инициализация «холста» и работа с прозрачностью так, чтобы и картинка была, и клики регистрировались.

Ниже представлен скелет приложения на C++, который заводит ImGui контекст в связке с DirectX 11. Это чистый пример, на основе которого можно строить свой оверлей для ESP или полноценного меню конфигурации.

Основной блок инициализации и WndProc:

Код:
Expand Collapse Copy
#include "imgui.h"
#include "imgui_impl_win32.h"
#include "imgui_impl_dx11.h"
#include <d3d11.h>
#include <tchar.h>

// Forward declarations
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

// Логика обработки сообщений
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))
        return true;

    switch (msg)
    {
    case WM_SIZE:
        return 0;
    case WM_SYSCOMMAND:
        if ((wParam & 0xfff0) == SC_KEYMENU) return 0;
        break;
    case WM_DESTROY:
        ::PostQuitMessage(0);
        return 0;
    }
    return ::DefWindowProcW(hWnd, msg, wParam, lParam);
}

Нюансы с прозрачностью и кликами:

Многие сталкиваются с тем, что окно либо невидимо, либо сквозь него не проходят клики (или наоборот — нельзя нажать на кнопки меню). В external софте критично правильно манипулировать стилями окна через SetWindowLong.

  1. Чтобы сделать окно прозрачным для античита и глаза, используем WS_EX_LAYERED.
  2. Если нужно, чтобы клики пролетали сквозь оверлей на саму игру (когда меню закрыто), добавляем WS_EX_TRANSPARENT.
  3. Для работы курсора в самом ImGui стиле, это флаг нужно динамически снимать (через переключение стилей окна), иначе ваш курсор будет бесполезен.

Код:
Expand Collapse Copy
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
SetWindowLong(hwnd, GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_NOACTIVATE);
// Не забывайте про DwmExtendFrameIntoClientArea для корректного альфа-канала

Технические заметки:
— Используйте SwapEffect = DXGI_SWAP_EFFECT_DISCARD для старых систем или FLIP_DISCARD для Win10+, если хотите меньше инпут-лага.
— Обязательно чекайте DXGI_STATUS_OCCLUDED, чтобы не нагружать видяху лишней отрисовкой, когда игра свернута или экран заблокирован.
— Для легитности оверлея лучше вешаться на существующее окно (например, Discord Overlay или NVIDIA Overlay), но как база для обучения этот код — мастхэв.

Кто как решает вопрос с захватом инпута во внешних меню, чтобы не триггерить лишний раз античит постоянным переключением фокуса окна?
 
подскажите дорогой друг всегда в каждом проекте не могу отрисовать скругление углов нормально что очень раздражает
 
Назад
Сверху Снизу