Тут я опишу всю последовательность интеграции "библиотеки" 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) в поток 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(); происходит "создание интерфейса".... в конечном итоге у нас получилось: На этом пока все. Как приеду с отпуска дополню темку важными моментами(чисто по своему мнению) или по заявкам "телезрителей". Скачать полный проект с ЯДиск ВТ(Для особо одаренных паникеров: ругается на D3d9test из-за специфики кода автоподгрузки длл)
Сделал бы ты подсветку синтаксиса, код видно ужасно. Код Сделал бы ты подсветку синтаксиса, код видно ужасно.