Ну как бы...Как перевести ImGuiKey в обычную клавишу int?
Я уже по разному пробовал, как и метод GetKeyIndex имгуишный и т д, не знаю что делатьC++:if (utils->isKeyPressed(static_cast<int>(gConfig->data["button"].get<ImGuiKey>()), 20))
Они от 522 (где то так) хранятся, но если вычитать 522, то все равно не тот инт получается, например если Q выбрана, то клавиша, которая получится, если вычесть 522 - это цифра 2Ну как бы...
imgui/imgui.h at 0b309471f2ed0117bbffda43684f54404cf14ea2 · ocornut/imgui
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imguigithub.com
В SAMP-API нет хуков, для удобной работы с ракнет хуками можешь использовать rakhookпомоги пожалуйста, как сделать хук входящих пакетов в SAMP API?
IsKeyPressed вне имгуи = краш, а мне нужно как раз таки извнеКомментарии есть еще. Вариант использовать имгуишный метод проверки нажатия клавиш
imgui/imgui.h at 0b309471f2ed0117bbffda43684f54404cf14ea2 · ocornut/imgui
Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imguigithub.com
std::unordered_map<ImGuiKey, int> kImGui = {
{ImGuiKey_Tab, 9},
{ImGuiKey_LeftArrow, 37},
{ImGuiKey_RightArrow, 39},
{ImGuiKey_UpArrow, 38},
{ImGuiKey_DownArrow, 40},
{ImGuiKey_PageUp, 33},
{ImGuiKey_PageDown, 34},
{ImGuiKey_Home, 36},
{ImGuiKey_End, 35},
{ImGuiKey_Insert, 45},
{ImGuiKey_Delete, 46},
{ImGuiKey_Backspace, 8},
{ImGuiKey_Space, 32},
{ImGuiKey_Enter, 13},
{ImGuiKey_Escape, 27},
{ImGuiKey_A, 65},
{ImGuiKey_B, 66},
{ImGuiKey_C, 67},
{ImGuiKey_D, 68},
{ImGuiKey_E, 69},
{ImGuiKey_F, 70},
{ImGuiKey_G, 71},
{ImGuiKey_H, 72},
{ImGuiKey_I, 73},
{ImGuiKey_J, 74},
{ImGuiKey_K, 75},
{ImGuiKey_L, 76},
{ImGuiKey_M, 77},
{ImGuiKey_N, 78},
{ImGuiKey_O, 79},
{ImGuiKey_P, 80},
{ImGuiKey_Q, 81},
{ImGuiKey_R, 82},
{ImGuiKey_S, 83},
{ImGuiKey_T, 84},
{ImGuiKey_U, 85},
{ImGuiKey_V, 86},
{ImGuiKey_W, 87},
{ImGuiKey_X, 88},
{ImGuiKey_Y, 89},
{ImGuiKey_Z, 90},
{ImGuiKey_0, 48},
{ImGuiKey_1, 49},
{ImGuiKey_2, 50},
{ImGuiKey_3, 51},
{ImGuiKey_4, 52},
{ImGuiKey_5, 53},
{ImGuiKey_6, 54},
{ImGuiKey_7, 55},
{ImGuiKey_8, 56},
{ImGuiKey_9, 57},
{ImGuiKey_F1, 112},
{ImGuiKey_F2, 113},
{ImGuiKey_F3, 114},
{ImGuiKey_F4, 115},
{ImGuiKey_F5, 116},
{ImGuiKey_F6, 117},
{ImGuiKey_F7, 118},
{ImGuiKey_F8, 119},
{ImGuiKey_F9, 120},
{ImGuiKey_F10, 121},
{ImGuiKey_F11, 122},
{ImGuiKey_F12, 123},
{ImGuiKey_F13, 124},
{ImGuiKey_F14, 125},
{ImGuiKey_F15, 126},
{ImGuiKey_F16, 127},
{ImGuiKey_F17, 128},
{ImGuiKey_F18, 129},
{ImGuiKey_F19, 130},
{ImGuiKey_F20, 131},
{ImGuiKey_F21, 132},
{ImGuiKey_F22, 133},
{ImGuiKey_F23, 134},
{ImGuiKey_F24, 135},
{ImGuiKey_Apostrophe, 192},
{ImGuiKey_Comma, 188},
{ImGuiKey_Minus, 189},
{ImGuiKey_Period, 190},
{ImGuiKey_Slash, 191},
{ImGuiKey_Semicolon, 186},
{ImGuiKey_Equal, 187},
{ImGuiKey_LeftBracket, 219},
{ImGuiKey_Backslash, 220},
{ImGuiKey_RightBracket, 221},
{ImGuiKey_GraveAccent, 192},
{ImGuiKey_CapsLock, 20},
{ImGuiKey_ScrollLock, 145},
{ImGuiKey_NumLock, 144},
{ImGuiKey_PrintScreen, 44},
{ImGuiKey_Pause, 19},
{ImGuiKey_Keypad0, 96},
{ImGuiKey_Keypad1, 97},
{ImGuiKey_Keypad2, 98},
{ImGuiKey_Keypad3, 99},
{ImGuiKey_Keypad4, 100},
{ImGuiKey_Keypad5, 101},
{ImGuiKey_Keypad6, 102},
{ImGuiKey_Keypad7, 103},
{ImGuiKey_Keypad8, 104},
{ImGuiKey_Keypad9, 105},
{ImGuiKey_KeypadDecimal, 110},
{ImGuiKey_KeypadDivide, 111},
{ImGuiKey_KeypadMultiply, 106},
{ImGuiKey_KeypadSubtract, 109},
{ImGuiKey_KeypadAdd, 107},
{ImGuiKey_KeypadEnter, 13},
{ImGuiKey_KeypadEqual, 187},
{ImGuiKey_LeftShift, VK_LSHIFT},
{ImGuiKey_RightShift, VK_RSHIFT},
{ImGuiKey_LeftCtrl, VK_LCONTROL},
{ImGuiKey_RightCtrl, VK_RCONTROL},
{ImGuiKey_LeftAlt, VK_LMENU},
{ImGuiKey_RightAlt, VK_RMENU},
{ImGuiKey_LeftSuper, VK_LWIN},
{ImGuiKey_RightSuper, VK_RWIN},
};
auto drawlist = ImGui::GetBackgroundDrawList();
std::string huy = "huy"
drawlist->AddText(ImVec2{1000, 100}, 0xFFFFFFFF, utils::convertCP1251ToUTF8(huy.c_str()));
std::string utils::CP1251ToUTF8(const char *str)
{
std::string res;
int result_u, result_c;
result_u = MultiByteToWideChar(1251, 0, str, -1, 0, 0);
if (!result_u)
return 0;
wchar_t *ures = new wchar_t[result_u];
if (!MultiByteToWideChar(1251, 0, str, -1, ures, result_u)) {
delete[] ures;
return 0;
}
result_c = WideCharToMultiByte(CP_UTF8, 0, ures, -1, 0, 0, 0, 0);
if (!result_c) {
delete[] ures;
return 0;
}
char *cres = new char[result_c];
if (!WideCharToMultiByte(CP_UTF8, 0, ures, -1, cres, result_c, 0, 0)) {
delete[] cres;
return 0;
}
delete[] ures;
res.append(cres);
delete[] cres;
return res;
}
Меня спасло, и за тебя помолюсь ( с этим в принципе не нужны приколы с преобразованиями, у меня так )Пытаюсь перевести строку из CP1251 в UTF8 для рендера в ImGUI, но результата 0 (в ответ получаю знаки вопроса):
C++:auto drawlist = ImGui::GetBackgroundDrawList(); std::string huy = "huy" drawlist->AddText(ImVec2{1000, 100}, 0xFFFFFFFF, utils::convertCP1251ToUTF8(huy.c_str()));
C++:std::string utils::CP1251ToUTF8(const char *str) { std::string res; int result_u, result_c; result_u = MultiByteToWideChar(1251, 0, str, -1, 0, 0); if (!result_u) return 0; wchar_t *ures = new wchar_t[result_u]; if (!MultiByteToWideChar(1251, 0, str, -1, ures, result_u)) { delete[] ures; return 0; } result_c = WideCharToMultiByte(CP_UTF8, 0, ures, -1, 0, 0, 0, 0); if (!result_c) { delete[] ures; return 0; } char *cres = new char[result_c]; if (!WideCharToMultiByte(CP_UTF8, 0, ures, -1, cres, result_c, 0, 0)) { delete[] cres; return 0; } delete[] ures; res.append(cres); delete[] cres; return res; }
#pragma execution_character_set("utf-8")
у тебя память течёт в 20 строке, удали uresПытаюсь перевести строку из CP1251 в UTF8 для рендера в ImGUI, но результата 0 (в ответ получаю знаки вопроса):
C++:auto drawlist = ImGui::GetBackgroundDrawList(); std::string huy = "huy" drawlist->AddText(ImVec2{1000, 100}, 0xFFFFFFFF, utils::convertCP1251ToUTF8(huy.c_str()));
C++:std::string utils::CP1251ToUTF8(const char *str) { std::string res; int result_u, result_c; result_u = MultiByteToWideChar(1251, 0, str, -1, 0, 0); if (!result_u) return 0; wchar_t *ures = new wchar_t[result_u]; if (!MultiByteToWideChar(1251, 0, str, -1, ures, result_u)) { delete[] ures; return 0; } result_c = WideCharToMultiByte(CP_UTF8, 0, ures, -1, 0, 0, 0, 0); if (!result_c) { delete[] ures; return 0; } char *cres = new char[result_c]; if (!WideCharToMultiByte(CP_UTF8, 0, ures, -1, cres, result_c, 0, 0)) { delete[] cres; return 0; } delete[] ures; res.append(cres); delete[] cres; return res; }
1) Покажи код
Из тогочто ты сказал,ничего не помогло1) Покажи код
2) Скорее всего нужно:
- либо добавить:
#pragma comment (lib, "ws2_32.lib")
- либо убрать инклюд windows.h