HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 04.07.2022, 02:30
ANZR
Участник форума
Регистрация: 03.08.2019
Сообщений: 168
С нами: 3568604

Репутация: 48
По умолчанию

При вызове ImGui_ImplWin32_WndProcHandler появляется курсор, который нельзя никак убрать .-.

Я пробовал ImGui::GetIO().MouseDrawCursor = false; и все равно курсор остается на месте
 
Ответить с цитированием

  #2  
Старый 04.07.2022, 17:58
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

Значит ты чет не так делаешь. Обработчик просто так курсор не скрывает и не показывает. Проблема в твоем коде, который мы не видим и не можем указать где ошибка.
 
Ответить с цитированием

  #3  
Старый 04.07.2022, 19:10
RedHolms
Постоянный
Регистрация: 04.06.2020
Сообщений: 620
С нами: 3127813

Репутация: 133


По умолчанию

Это только ПРИМЕР, его ты интегрируешь в свой код

C++:





Код:
// куда-нибудь
static
bool
isCursorActiveValue
=
true
;
static
void
showCursor_impl
(
bool
v
)
{
samp
::
RefGame
(
)
->
SetCursorMode
(
v
?
samp
::
CURSOR_LOCKCAM
:
samp
::
CURSOR_NONE
,
!
v
)
;
if
(
!
v
)
samp
::
RefGame
(
)
->
ProcessInputEnabling
(
)
;
}
void
showCursor
(
bool
show
)
{
if
(
show
)
{
showCursor_impl
(
true
)
;
ImGui
::
GetIO
(
)
.
ConfigFlags
&=
~
ImGuiConfigFlags_NoMouseCursorChange
;
}
else
if
(
isCursorActiveValue
)
{
showCursor_impl
(
false
)
;
ImGui
::
GetIO
(
)
.
ConfigFlags
|=
ImGuiConfigFlags_NoMouseCursorChange
;
ImGui
::
SetMouseCursor
(
ImGuiMouseCursor_None
)
;
}
isCursorActiveValue
=
show
;
}
// в хуке Present
if
(
ImguiActive
(
)
)
{
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
ImguiDraw
(
)
;
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
}
showCursor
(
ImguiMouseActive
(
)
)
;
 
Ответить с цитированием

  #4  
Старый 04.07.2022, 21:25
ANZR
Участник форума
Регистрация: 03.08.2019
Сообщений: 168
С нами: 3568604

Репутация: 48
По умолчанию

Цитата:
Сообщение от Dark_Knight  

Значит ты чет не так делаешь. Обработчик просто так курсор не скрывает и не показывает. Проблема в твоем коде, который мы не видим и не можем указать где ошибка.
Вот отрывок кода. Мышка появляется только когда я подключаю к WndProc обработчик ImGui

KeyHook.cpp:





Код:
LRESULT APIENTRY CKeyHook
::
hkWndProc
(
HWND hWnd
,
UINT msg
,
WPARAM wParam
,
LPARAM lParam
)
{
switch
(
msg
)
{
case
WM_SYSKEYDOWN
:
case
WM_SYSKEYUP
:
case
WM_KEYDOWN
:
case
WM_KEYUP
:
{
bool
bDown
=
(
msg
==
WM_SYSKEYDOWN
||
msg
==
WM_KEYDOWN
)
;
int
iKey
=
(
int
)
wParam
;
uint32_t
ScanCode
=
LOBYTE
(
HIWORD
(
lParam
)
)
;
pKeyHook
->
bKeyTable
[
iKey
]
=
bDown
;
break
;
}
}
if
(
pMenu
->
bOpen
)
ImGui_ImplWin32_WndProcHandler
(
hWnd
,
msg
,
wParam
,
lParam
)
;
if
(
isKeyPressed
(
VK_INSERT
)
)
{
pMenu
->
bOpen
=
!
pMenu
->
bOpen
;
pMenu
->
iToggle
=
0
;
}
return
pKeyHook
->
oWndProc
(
hWnd
,
msg
,
wParam
,
lParam
)
;
}


KeyHook.h:





Код:
class
CKeyHook
{
public
:
CKeyHook
(
)
{
memset
(
bKeyTable
,
false
,
sizeof
(
bKeyTable
)
)
;
oWndProc
=
(
tWndProc
)
(
pSAMP
->
g_dwSAMP_Addr
+
0x5DB40
)
;
oCPad_UpdateGameKey
=
(
tCPad_UpdateGameKey
)
0x541C40
;
DetourRestoreAfterWith
(
)
;
DetourTransactionBegin
(
)
;
DetourUpdateThread
(
GetCurrentThread
(
)
)
;
pSecure
->
SDetourAttach
(
&
(
PVOID
&
)
oWndProc
,
hkWndProc
)
;
DetourTransactionCommit
(
)
;
pSecure
->
HookInstallCall
(
(
DWORD
)
0x541E17
,
(
DWORD
)
hkCPad_UpdateGameKey
)
;
}
~
CKeyHook
(
)
{
memset
(
bKeyTable
,
false
,
sizeof
(
bKeyTable
)
)
;
DetourRestoreAfterWith
(
)
;
DetourTransactionBegin
(
)
;
DetourUpdateThread
(
GetCurrentThread
(
)
)
;
DetourDetach
(
&
(
PVOID
&
)
oWndProc
,
hkWndProc
)
;
DetourTransactionCommit
(
)
;
Memory
::
memcpy_safe
(
(
void
*
)
0x541E17
,
"\xE8\x24\xFE\xFF\xFF"
,
5
)
;
}
bool
bKeyTable
[
256
]
;
struct
stGameKeyState
{
int
iState
{
0
}
;
bool
bActive
{
false
}
;
}
g_GameKeyState
[
32
]
;
private
:
typedef
LRESULT
(
__stdcall
*
tWndProc
)
(
HWND
,
UINT
,
WPARAM
,
LPARAM
)
;
typedef
BYTE
(
__thiscall
*
tCPad_UpdateGameKey
)
(
CPad
*
,
int
)
;
static
LRESULT __stdcall
hkWndProc
(
HWND hWnd
,
UINT msg
,
WPARAM wParam
,
LPARAM lParam
)
;
static
BYTE __stdcall
hkCPad_UpdateGameKey
(
int
iKey
)
;
tWndProc oWndProc
;
tCPad_UpdateGameKey oCPad_UpdateGameKey
;
}
;
extern
CKeyHook
*
pKeyHook
;




Цитата:
Сообщение от RedHolms  

Это только ПРИМЕР, его ты интегрируешь в свой код

C++:





Код:
// куда-нибудь
static
bool
isCursorActiveValue
=
true
;
static
void
showCursor_impl
(
bool
v
)
{
samp
::
RefGame
(
)
->
SetCursorMode
(
v
?
samp
::
CURSOR_LOCKCAM
:
samp
::
CURSOR_NONE
,
!
v
)
;
if
(
!
v
)
samp
::
RefGame
(
)
->
ProcessInputEnabling
(
)
;
}
void
showCursor
(
bool
show
)
{
if
(
show
)
{
showCursor_impl
(
true
)
;
ImGui
::
GetIO
(
)
.
ConfigFlags
&=
~
ImGuiConfigFlags_NoMouseCursorChange
;
}
else
if
(
isCursorActiveValue
)
{
showCursor_impl
(
false
)
;
ImGui
::
GetIO
(
)
.
ConfigFlags
|=
ImGuiConfigFlags_NoMouseCursorChange
;
ImGui
::
SetMouseCursor
(
ImGuiMouseCursor_None
)
;
}
isCursorActiveValue
=
show
;
}
// в хуке Present
if
(
ImguiActive
(
)
)
{
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
ImguiDraw
(
)
;
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
}
showCursor
(
ImguiMouseActive
(
)
)
;

ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange; Помогло решить эту проблему

Сябик)

Крч, как я пофиксил

Я в конструктор класса CMenu вставил вот эту строчку







C++:





Код:
ImGui
::
GetIO
(
)
.
ConfigFlags
|=
ImGuiConfigFlags_NoMouseCursorChange
;


После чего все стало нормальным

Выглядит оно вот так

C++:





Код:
class
CMenu
{
public
:
CMenu
(
IDirect3DDevice9
*
pDevice
)
{
iToggle
=
3
;
ImGui
::
CreateContext
(
)
;
ImGui
::
GetIO
(
)
.
IniFilename
=
NULL
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
pDevice
)
;
ImGui
::
GetIO
(
)
.
ConfigFlags
|=
ImGuiConfigFlags_NoMouseCursorChange
;
pFont
=
ImGui
::
GetIO
(
)
.
Fonts
->
AddFontFromFileTTF
(
"C:\\Windows\\Fonts\\verdanab.ttf"
,
13.1f
)
;
Theme
(
)
;
}
;
~
CMenu
(
)
{
ImGui_ImplDX9_Shutdown
(
)
;
ImGui_ImplWin32_Shutdown
(
)
;
ImGui
::
DestroyContext
(
)
;
}
;
void
Update
(
)
;
void
Render
(
)
;
void
Theme
(
)
;
int
iToggle
,
iCurrentTab
,
iCurrentCategory
;
bool
bOpen
=
false
;
ImFont
*
pFont
,
*
pIcons
;
}
;
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.