Для начала нужно скачать пустой проект SF, это можно сделать в этой теме .
Открываем проект и в начало сразу вставляем:
Для подключения ImGui нам понадобиться каллбеки на present, reset, wndproc.
Present:
Reset:
Wndproc:
в mainloop регистрируем их:
Теперь можно перейти к подключению ImGui. Скачиваем и распаковываем в папке с проектом эти файлы:
Переходим в папку examples и добавляем в проект 4 файла:
В начало main.cpp добавляем #include:
После успешного добавления файлов, можно перейти к инициализации, она будет проходить в mainloop.Для инициализации нам нужен hwnd окна и device.
Перейдем к презенту:
Добавляем в reset:
В Wndproc:
Добавляем выгрузку плагина:
В итоге у вас должно получится вот это:
На момент написания гайда использовалась версия: 1.63
Открываем проект и в начало сразу вставляем:
C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
Present:
C++:
bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)
{
if (SUCCEEDED(SF->getRender()->BeginRender()))
{
SF->getRender()->EndRender();
}
return true;
}
C++:
HRESULT CALLBACK Reset(D3DPRESENT_PARAMETERS* pPresentationParameters)
{
return true;
}
C++:
bool CALLBACK WndProcHandler(HWND hwd, UINT msg, WPARAM wParam, LPARAM lParam)
{
return true;
}
C++:
SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_RESET, Reset);
SF->getGame()->registerWndProcCallback(SFGame::MEDIUM_CB_PRIORITY, WndProcHandler);
Теперь можно перейти к подключению ImGui. Скачиваем и распаковываем в папке с проектом эти файлы:
C++:
imgui.cpp
imconfig.h
imgui.h
imgui_demo.cpp
imgui_draw.cpp
imgui_internal.h
stb_rect_pack.h
stb_textedit.h
stb_truetype.h
C++:
imgui_impl_dx9.cpp
imgui_impl_dx9.h
imgui_impl_win32.cpp
imgui_impl_win32.h
C++:
#include "imgui.h"
#include "imgui_impl_dx9.h"
#include "imgui_impl_win32.h"
#include <d3d9.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <tchar.h>
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
C++:
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO(); (void)io;
ImGui_ImplWin32_Init(GetActiveWindow());
ImGui_ImplDX9_Init(SF->getRender()->getD3DDevice());
C++:
ImGui_ImplDX9_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
if (activew)
{
ImGui::Begin("ImGui меню", &activew, ImVec2(305, 160), 0.8f, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoResize);
{
ImGui::Checkbox("Aimbot", &bAimbot);
ImGui::Checkbox("WH", &bAimbot);
ImGui::Checkbox("SpeedHack", &bAimbot);
ImGui::Checkbox("Что-то крутое", &bAimbot);
}
ImGui::End();
}
ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
C++:
ImGui_ImplDX9_InvalidateDeviceObjects();
C++:
ImGui_ImplWin32_WndProcHandler(hwd, msg, wParam, lParam);
C++:
//Вставляем функцию перед mainloop:
void CALLBACK PluginFree()
{
ImGui_ImplDX9_Shutdown();
ImGui_ImplWin32_Shutdown();
ImGui::DestroyContext();
}
SF->getGame()->registerGameDestructorCallback(PluginFree);
// в mainloop регистрируем каллбек
Последнее редактирование: