Вопрос Проблемы с ImGui

Новичок
Статус
Оффлайн
Регистрация
27 Янв 2018
Сообщения
8
Реакции[?]
0
Поинты[?]
0
Не могу манипулировать окном ImGui в игре.
Он открывается но перемещать или ставить галки на чекбоксы не могу...

C++:
#include "includes.h"

// Create the type of function that we will hook
typedef long(__stdcall* EndScene)(LPDIRECT3DDEVICE9);
static EndScene oEndScene = NULL;
static HWND window = NULL;

WNDPROC oWndProc;

extern LRESULT ImGui_ImplWin32_WndProcHandle(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

void InitImGui(LPDIRECT3DDEVICE9 pDevice)
{
    ImGui::CreateContext();
    ImGuiIO& io = ImGui::GetIO();
    io.ConfigFlags = ImGuiConfigFlags_NoMouseCursorChange;
    ImGui_ImplWin32_Init(window);
    ImGui_ImplDX9_Init(pDevice);
}

bool init = false;
bool openmenu = false;

// Declare the detour function
long __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
    if (!init)
    {
        InitImGui(pDevice);
        init = true;
    }

    if (GetAsyncKeyState(VK_INSERT) & 1)
    {
        openmenu = !openmenu;
    }

    if (GetAsyncKeyState(VK_END))
    {
        kiero::shutdown();
        return 0;
    }

    if (openmenu)
    {
        ImGui_ImplDX9_NewFrame();
        ImGui_ImplWin32_NewFrame();
        ImGui::NewFrame();

        ImGui::Begin("Sv1n|Ware");
        ImGui::End();

        ImGui::EndFrame();
        ImGui::Render();
        ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
    }
        return oEndScene(pDevice);
    
}

LRESULT _stdcall WndProc(const HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    if (true && ImGui_ImplWin32_WndProcHandle(hwnd, uMsg, wParam, lParam))
        return true;

    return CallWindowProc(oWndProc, hwnd, uMsg, wParam, lParam);
}

BOOL CALLBACK EnumWindowsCallBack(HWND handle, LPARAM lParam)
{
    DWORD procID;
    GetWindowThreadProcessId(handle, &procID);

    if (GetCurrentProcessId() != procID)
        return TRUE;

    window = handle;
    return false;
}

HWND GetProcessWindow()
{
    window = NULL;
    EnumWindows(EnumWindowsCallBack, NULL);
    return window;
}

int mainThread()
{
    if (kiero::init(kiero::RenderType::D3D9) == kiero::Status::Success)
    {
        kiero::bind(42, (void**)&oEndScene, hkEndScene);
        window = GetProcessWindow();
        oWndProc = (WNDPROC)SetWindowLongPtr(window, GWL_WNDPROC, (LONG_PTR)WndProc);
    }
    return 0;
}

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID)
{
    DisableThreadLibraryCalls(hInstance);

    if (fdwReason == DLL_PROCESS_ATTACH)
    { 
        CloseHandle(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)mainThread, NULL, 0, NULL));

    }

    return TRUE;
}

LRESULT ImGui_ImplWin32_WndProcHandle(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    return LRESULT();
}
 
Участник
Статус
Оффлайн
Регистрация
2 Фев 2020
Сообщения
818
Реакции[?]
378
Поинты[?]
0
C++:
#include "includes.h"

LRESULT ImGui_ImplWin32_WndProcHandle(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    return LRESULT();
}
Зачем? В этом проблемма, это функция имгуи, а ты ее переопределяешь. Инклюдни imgui_impl_win32.h
 
Новичок
Статус
Оффлайн
Регистрация
27 Янв 2018
Сообщения
8
Реакции[?]
0
Поинты[?]
0
Зачем? В этом проблемма, это функция имгуи, а ты ее переопределяешь. Инклюдни imgui_impl_win32.h
Убрал, но при компиляции выдаёт ошибку
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка LNK2019 ссылка на неразрешенный внешний символ "long __cdecl ImGui_TmplWin32_WndProcHandle(struct HWND__ *,unsigned int,unsigned int,long)" (?ImGui_TmplWin32_WndProcHandle@@YAJPAUHWND__@@IIJ@Z) в функции "long __stdcall WndProc(struct HWND__ * const,unsigned int,unsigned int,long)" (?WndProc@@YGJQAUHWND__@@IIJ@Z). SW1N_WARE C:\Users\hatred\Desktop\SW1N_WARE\SW1N_WARE\main.obj 1
 
Участник
Статус
Оффлайн
Регистрация
2 Фев 2020
Сообщения
818
Реакции[?]
378
Поинты[?]
0
Убрал, но при компиляции выдаёт ошибку
C++:
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
а не
C++:
extern LRESULT ImGui_ImplWin32_WndProcHandle(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
если не поможет - кинь файл win32
 
Новичок
Статус
Оффлайн
Регистрация
27 Янв 2018
Сообщения
8
Реакции[?]
0
Поинты[?]
0
C++:
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
а не
C++:
extern LRESULT ImGui_ImplWin32_WndProcHandle(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
если не поможет - кинь файл win32
Спасибо, братишка, очень помог!
 
Сверху Снизу