Загрузка...

[ImGui]Graphical User Interface

Тема в разделе Программирование создана пользователем Happy 23 авг 2017. 2564 просмотра

  1. Happy
    Happy Автор темы 23 авг 2017 Держу курс на заебись 539 23 апр 2017
    Тут я опишу всю последовательность интеграции "библиотеки" ImGui в свой проект DLL.

    Создаем проект как сказано тут Graphical User Interface DirectX v.2017 . Хук берем из этой же темы(берем все до третьего шага включительно).
    Качаем свежий проект IMGui
    Распаковываем, кидаем в папку ImGui внутри папки проекта, все указанные ниже файлы:
    здесь

    флаг
    Код:
    bool bShowWindow = true;
    отвечает за показ меню. True - открыто сразу при инициализации, false - скрыто.
    переключение идет в блоке myWndProc при нажатии кнопки END
    Код:
    if (GetAsyncKeyState(VK_END) & 1)bShowWindow ^= 1;
    в cInclude.h подрубаем
    Код:
    #include "Impl.h"


    Для полной функциональности управления меню нам необходимо перехватить оконную процедуру конечного приложения и при открытии меню "врезать" свой код в его контекст.
    Пример будет на D3dTest(Будет в архиве).
    определяем необходимые данные с помощью Spy++(Меню "Cервис" в MVS)
    [IMG]

    в поток GUIDX, перед while (!Init()) добавляем:
    Код:
    hWnd = FindWindowA(NULL,"D3D9 Test");
    if (hWnd)
    m_pWindowProc = (WNDPROC)SetWindowLongPtr(hWnd, GWL_WNDPROC, (LONG_PTR)myWndProc);
    на DLL_PROCESS_DETACH в DllMain прописываем
    Код:
    SetWindowLongPtr(hWnd, GWL_WNDPROC, (LONG_PTR)m_pWindowProc);

    Теперь отрисовка:
    в myReset пишем перегрузку интерфейса при этом событии(изменение размера окна, сворачивание\разворачивание окна)
    Код:
    if (!Create)
    return m_pDevice->Reset(pPresentationParameters);

    ImGui_InvalidateDeviceObjects();


    auto result = oReset->GetTrampoline()(m_pDevice, pPresentationParameters);

    ImGui_CreateDeviceObjects();
    Код:
    bool Create = false;


    в myPresent пишем рисовку:
    Код:
    if (Create == false)
    {
    ImGui_Init(hWnd, m_pDevice);
    Create = true;
    }
    else
    {
    ImGui_NewFrame();

    if (bShowWindow)
    {
    DWORD dwFlag = ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoSavedSettings;
    ImGui::Begin( "[ImGui] ExGUI YouGame.biz" , &bShowWindow, ImVec2(450, 400), 1.0f, dwFlag);
    {

    ImGui::TextColored(ImColor(44, 234, 86), u8"DEMO::TextColored" );
    ImGui::SameLine();
    ImGui::TextColored(ImColor(122, 145, 120,100), u8"ver. 0.0.1");
    ImGui::Separator();


    ImGui::Button(u8"DEMO::Кнопка");

    }
    ImGui::End();
    }

    ImGui::Render();

    }



    return oPresent->GetTrampoline()(m_pDevice, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);

    }
    именно в блоке
    Код:
    ImGui::Begin( "[ImGui] ExGUI YouGame.biz" ,............
    {

    }
    ImGui::End();
    происходит "создание интерфейса"....


    в конечном итоге у нас получилось:
    [IMG]


    На этом пока все. Как приеду с отпуска дополню темку важными моментами(чисто по своему мнению) или по заявкам "телезрителей".

    Скачать полный проект с ЯДиск
    ВТ(Для особо одаренных паникеров: ругается на D3d9test из-за специфики кода автоподгрузки длл)
     
  2. pvolab
    pvolab 23 авг 2017 Never look back. 898 24 апр 2017
    Код
    Сделал бы ты подсветку синтаксиса, код видно ужасно.
     
Загрузка...
Top