Просмотр полной версии : Кириллица имгуи
Именно когда я хочу вывести вектор микрофонов в имгуи комбо я встречаю типо такого - ???? Realtek(R) Audio
chromiusj
06.04.2024, 17:28
[IMGUI] Русские символы (https://www.blast.hk/threads/39611/)
Здравствуйте форумчане. У меня есть вопрос, как можно сделать поддержку русских символов в Imgui меню. Разрабатываю я его на c++ для игры варфейс. Спасибо за ранее :)
www.blast.hk
[IMGUI] Русские символы (https://www.blast.hk/threads/39611/)
Здравствуйте форумчане. У меня есть вопрос, как можно сделать поддержку русских символов в Imgui меню. Разрабатываю я его на c++ для игры варфейс. Спасибо за ранее :)
www.blast.hk
Дядя я сказал в С++. Вектор для тебя это прикол?
Дядя я сказал в С++. Вектор для тебя это прикол?
+ вариант выше с вектором не проходит, только если объявлять в самом файле переменную
Dark_Knight
09.04.2024, 22:35
Арик, тебе дали для плюсов. Какие вопросы? Если что функция возращает указатель на созданный шрифт.
Арик, тебе дали для плюсов. Какие вопросы? Если что функция возращает указатель на созданный шрифт.
Отредактировано было. А еще шрифт не помогает.
Dark_Knight
09.04.2024, 23:18
Отредактировано было. А еще шрифт не помогает.
Не факт, что шрифт имеет такой набор символов или же указан неправильный диапазон
C++:
HRESULT
getMicrofones
(
)
{
HRESULT hr
;
IMMDeviceEnumerator
*
pEnumerator
=
NULL
;
IMMDeviceCollection
*
pDevices
=
NULL
;
IMMDevice
*
pDevice
=
NULL
;
LPWSTR pwszID
=
NULL
;
IPropertyStore
*
pProps
=
NULL
;
PROPVARIANT varName
;
hr
=
CoInitialize
(
NULL
)
;
if
(
FAILED
(
hr
)
)
{
return
hr
;
}
hr
=
CoCreateInstance
(
__uuidof
(
MMDeviceEnumerator
)
,
NULL
,
CLSCTX_ALL
,
__uuidof
(
IMMDeviceEnumerator
)
,
(
void
*
*
)
&
pEnumerator
)
;
if
(
FAILED
(
hr
)
)
{
CoUninitialize
(
)
;
return
hr
;
}
hr
=
pEnumerator
->
EnumAudioEndpoints
(
eCapture
,
DEVICE_STATE_ACTIVE
,
&
pDevices
)
;
if
(
FAILED
(
hr
)
)
{
pEnumerator
->
Release
(
)
;
CoUninitialize
(
)
;
return
hr
;
}
UINT count
;
hr
=
pDevices
->
GetCount
(
&
count
)
;
if
(
FAILED
(
hr
)
)
{
pDevices
->
Release
(
)
;
pEnumerator
->
Release
(
)
;
CoUninitialize
(
)
;
return
hr
;
}
for
(
UINT i
=
0
;
i
Item
(
i
,
&
pDevice
)
;
if
(
FAILED
(
hr
)
)
{
continue
;
}
hr
=
pDevice
->
GetId
(
&
pwszID
)
;
if
(
FAILED
(
hr
)
)
{
pDevice
->
Release
(
)
;
continue
;
}
hr
=
pDevice
->
OpenPropertyStore
(
STGM_READ
,
&
pProps
)
;
if
(
FAILED
(
hr
)
)
{
CoTaskMemFree
(
pwszID
)
;
pDevice
->
Release
(
)
;
continue
;
}
PropVariantInit
(
&
varName
)
;
hr
=
pProps
->
GetValue
(
PKEY_Device_FriendlyName
,
&
varName
)
;
if
(
FAILED
(
hr
)
)
{
pProps
->
Release
(
)
;
CoTaskMemFree
(
pwszID
)
;
pDevice
->
Release
(
)
;
continue
;
}
size_t size
=
wcslen
(
varName
.
pwszVal
)
+
1
;
char
*
buffer
=
new
char
[
size
]
;
wcstombs
(
buffer
,
varName
.
pwszVal
,
size
)
;
microphones
.
push_back
(
buffer
)
;
PropVariantClear
(
&
varName
)
;
pProps
->
Release
(
)
;
CoTaskMemFree
(
pwszID
)
;
pDevice
->
Release
(
)
;
}
pDevices
->
Release
(
)
;
pEnumerator
->
Release
(
)
;
CoUninitialize
(
)
;
return
S_OK
;
}
std
::
optional
D3D9Present
(
const
decltype
(
PresentHook
)
&
hook
,
IDirect3DDevice9
*
pDevice
,
CONST RECT
*
pSrcRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindow
,
CONST RGNDATA
*
pDirtyRegion
)
{
static
bool
ImGuiInit
{
}
;
if
(
!
ImGuiInit
)
{
ImGui
::
CreateContext
(
)
;
ImGui_ImplWin32_Init
(
*
*
reinterpret_cast
(
0xC17054
)
)
;
ImGui_ImplDX9_Init
(
pDevice
)
;
ImGui
::
GetIO
(
)
.
IniFilename
=
nullptr
;
#pragma warning(push)
#pragma warning(disable: 4996)
std
::
string font
{
getenv
(
"WINDIR"
)
}
;
font
+=
"\\Fonts\\Arialbd.TTF"
;
#pragma warning(pop)
ImGui
::
GetIO
(
)
.
Fonts
->
AddFontFromFileTTF
(
"C:\\Windows\\Fonts\\Arial.ttf"
,
16.5f
,
NULL
,
ImGui
::
GetIO
(
)
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
fontVoice
=
ImGui
::
GetIO
(
)
.
Fonts
->
AddFontFromMemoryTTF
(
monserratbold
,
sizeof
(
monserratbold
)
,
22.0f
,
NULL
,
ImGui
::
GetIO
(
)
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
style
(
)
;
auto
latest_wndproc_ptr
=
GetWindowLongPtrW
(
*
*
reinterpret_cast
(
0xC17054
)
,
GWLP_WNDPROC
)
;
WndProcHook
.
set_dest
(
latest_wndproc_ptr
)
;
WndProcHook
.
set_cb
(
&
WndProc
)
;
WndProcHook
.
install
(
)
;
ImGuiInit
=
{
true
}
;
}
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
ImGui
::
Combo
(
u8
"ShowMic"
,
&
selectedMic
,
microphones
.
data
(
)
,
microphones
.
size
(
)
)
;
}
void
main
(
)
{
static
bool
inited
=
false
;
setlocale
(
LC_ALL
,
"rus"
)
;
if
(
!
inited
&&
samp
::
RefChat
(
)
!=
nullptr
)
{
getMicrofones
(
)
;
inited
=
true
;
}
}
где моя ошибка?
Не факт, что шрифт имеет такой набор символов или же указан неправильный диапазон
выше код написал
Dark_Knight
09.04.2024, 23:57
Банально я удивлен как оно у тебя вообще работает хотя не должно, а ну да. В дебаге рендеришь. Короче. переделывай рендер. Насколько я помню, дебаг окно имгуи только стандартный шрифт имгуи юзает. и комбо уже давно устарелая функция.
Банально Я удивлен как оно у тебя вообще работает хотя не должно, а ну да. В дебаге рендеришь. Короче. переделывай рендер. Насколько я помню, дебаг окно имгуи только стандартный шрифт имгуи юзает. и комбо уже давно устарелая функция.
не дебаг окно, оно внутри имгуи::бегин, и что посоветуешь вместо комбо?
Dark_Knight
10.04.2024, 00:01
не дебаг окно, оно внутри имгуи::бегин, и что посоветуешь вместо комбо?
Документацию и тестовое приложение. У меня уже давно ВСки нет и хз че там. Точно помню, что комбо deprecated
И убери локаль.
Документацию и тестовое приложение. У меня уже давно ВСки нет и хз че там. Точно помню, что комбо deprecated
https://forum.antichat.xyz/attachments/28481514/
без локаля ситуация еще хуже
Dark_Knight
10.04.2024, 00:34
Я чет не пойму где ты что делаешь? Ты не забывай, что имгуи не windows-1251 текст отображает, а текст скорее всего у тебя получаеться именно в этой кодировке
Я чет не пойму где ты что делаешь? Ты не забывай, что имгуи не windows-1251 текст отображает, а текст скорее всего у тебя получаеться именно в этой кодировке
Если можешь - отпиши куда-нибудь, я вне форума объясню ситуацию. В профиле ссылки
параметр /utf-8 добавь
https://forum.antichat.xyz/attachments/28485886/
Актуально?
Если да — то скину решение из моего проекта.
Актуально?
Если да — то скину решение из моего проекта.
Я решил это путем перебора символов кириллицы, но хочу увидеть все решения, буду благодарен)
C++:
// в начало кода
#define utf8(a) ConvertStringToImGUI(a.c_str()).c_str()
std
::
string
ConvertStringToImGUI
(
const
char
*
str
)
{
int
wchars_num
=
MultiByteToWideChar
(
CP_ACP
,
0
,
str
,
-
1
,
NULL
,
0
)
;
std
::
wstring wide
;
wide
.
resize
(
wchars_num
)
;
MultiByteToWideChar
(
CP_ACP
,
0
,
str
,
-
1
,
&
wide
[
0
]
,
wchars_num
)
;
std
::
wstring_convert
>
myconv
;
return
myconv
.
to_bytes
(
wide
)
;
}
// вот использование
std
::
string s
=
"абвгд"
;
ImGui
::
Text
(
utf8
(
s
)
)
;
В настройках проекта включена многобайтовая кодировка (не уверен, что она нужна, но просто говорю).
C++:
// в начало кода
#define utf8(a) ConvertStringToImGUI(a.c_str()).c_str()
std
::
string
ConvertStringToImGUI
(
const
char
*
str
)
{
int
wchars_num
=
MultiByteToWideChar
(
CP_ACP
,
0
,
str
,
-
1
,
NULL
,
0
)
;
std
::
wstring wide
;
wide
.
resize
(
wchars_num
)
;
MultiByteToWideChar
(
CP_ACP
,
0
,
str
,
-
1
,
&
wide
[
0
]
,
wchars_num
)
;
std
::
wstring_convert
>
myconv
;
return
myconv
.
to_bytes
(
wide
)
;
}
// вот использование
std
::
string s
=
"абвгд"
;
ImGui
::
Text
(
utf8
(
s
)
)
;
В настройках проекта включена многобайтовая кодировка (не уверен, что она нужна, но просто говорю).
зачем этой еблей заниматься
параметр /utf-8 добавь
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot