В чем ошибка?
https://forum.antichat.xyz/attachments/27814594/
Код:
C++:
Код:
#include
#include
#include
#include
#include
#include
#include
#include
#include "imgui.h"
#include "imgui_impl_dx9.h"
#include "imgui_impl_win32.h"
bool
windowWorking
=
false
;
bool
enable
=
true
;
static
LPDIRECT3D9 g_pD3D
=
NULL
;
static
LPDIRECT3DDEVICE9 g_pd3dDevice
=
NULL
;
static
D3DPRESENT_PARAMETERS g_d3dpp
=
{
}
;
bool
CreateDeviceD3D
(
HWND hWnd
)
;
void
CleanupDeviceD3D
(
)
;
void
ResetDevice
(
)
;
LRESULT WINAPI
WndProc
(
HWND hWnd
,
UINT msg
,
WPARAM wParam
,
LPARAM lParam
)
;
int
main
(
)
{
setlocale
(
LC_ALL
,
"ru"
)
;
MessageBox
(
NULL
,
_T
(
"Приложение было запущено! Чтобы управлять им - нажмите ALT + 9"
)
,
_T
(
"Информационный диалог"
)
,
MB_OK
)
;
ShowWindow
(
GetConsoleWindow
(
)
,
SW_HIDE
)
;
WNDCLASSEX wc
=
{
sizeof
(
WNDCLASSEX
)
,
CS_CLASSDC
,
WndProc
,
0L
,
0L
,
GetModuleHandle
(
NULL
)
,
NULL
,
NULL
,
NULL
,
NULL
,
_T
(
"ImGui Example"
)
,
NULL
}
;
::
RegisterClassEx
(
&
wc
)
;
HWND hwnd
=
::
CreateWindow
(
wc
.
lpszClassName
,
_T
(
"Dear ImGui DirectX9 Example"
)
,
WS_OVERLAPPEDWINDOW
,
100
,
100
,
1280
,
800
,
NULL
,
NULL
,
wc
.
hInstance
,
NULL
)
;
while
(
!
hwnd
)
{
Sleep
(
0
)
;
}
if
(
!
CreateDeviceD3D
(
hwnd
)
)
{
CleanupDeviceD3D
(
)
;
::
UnregisterClass
(
wc
.
lpszClassName
,
wc
.
hInstance
)
;
return
1
;
}
::
ShowWindow
(
hwnd
,
SW_SHOWDEFAULT
)
;
::
UpdateWindow
(
hwnd
)
;
IMGUI_CHECKVERSION
(
)
;
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
(
void
)
io
;
ImGui
::
StyleColorsDark
(
)
;
ImGui_ImplWin32_Init
(
hwnd
)
;
ImGui_ImplDX9_Init
(
g_pd3dDevice
)
;
ImVec4 clear_color
=
ImVec4
(
0.45f
,
0.55f
,
0.60f
,
1.00f
)
;
while
(
true
)
{
Sleep
(
0
)
;
if
(
enable
)
{
if
(
GetAsyncKeyState
(
49
)
&&
GetAsyncKeyState
(
18
)
)
{
CString fromClipboard
;
if
(
OpenClipboard
(
NULL
)
)
{
HANDLE hData
=
GetClipboardData
(
CF_TEXT
)
;
char
*
chBuffer
=
(
char
*
)
GlobalLock
(
hData
)
;
fromClipboard
=
chBuffer
;
GlobalUnlock
(
hData
)
;
CloseClipboard
(
)
;
}
MessageBox
(
NULL
,
_T
(
"Текст в буфере обмена:\n----------\n"
)
+
fromClipboard
+
_T
(
"\n----------"
)
,
_T
(
"Скопированный текст"
)
,
MB_OK
)
;
}
}
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
if
(
windowWorking
)
ImGui
::
ShowDemoWindow
(
&
windowWorking
)
;
{
}
ImGui
::
EndFrame
(
)
;
g_pd3dDevice
->
SetRenderState
(
D3DRS_ZENABLE
,
FALSE
)
;
g_pd3dDevice
->
SetRenderState
(
D3DRS_ALPHABLENDENABLE
,
FALSE
)
;
g_pd3dDevice
->
SetRenderState
(
D3DRS_SCISSORTESTENABLE
,
FALSE
)
;
D3DCOLOR clear_col_dx
=
D3DCOLOR_RGBA
(
(
int
)
(
clear_color
.
x
*
clear_color
.
w
*
255.0f
)
,
(
int
)
(
clear_color
.
y
*
clear_color
.
w
*
255.0f
)
,
(
int
)
(
clear_color
.
z
*
clear_color
.
w
*
255.0f
)
,
(
int
)
(
clear_color
.
w
*
255.0f
)
)
;
g_pd3dDevice
->
Clear
(
0
,
NULL
,
D3DCLEAR_TARGET
|
D3DCLEAR_ZBUFFER
,
clear_col_dx
,
1.0f
,
0
)
;
if
(
g_pd3dDevice
->
BeginScene
(
)
>=
0
)
{
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
g_pd3dDevice
->
EndScene
(
)
;
}
HRESULT result
=
g_pd3dDevice
->
Present
(
NULL
,
NULL
,
NULL
,
NULL
)
;
if
(
result
==
D3DERR_DEVICELOST
&&
g_pd3dDevice
->
TestCooperativeLevel
(
)
==
D3DERR_DEVICENOTRESET
)
ResetDevice
(
)
;
if
(
GetAsyncKeyState
(
57
)
&&
GetAsyncKeyState
(
18
)
)
{
windowWorking
=
!
windowWorking
;
}
}
ImGui_ImplDX9_Shutdown
(
)
;
ImGui_ImplWin32_Shutdown
(
)
;
ImGui
::
DestroyContext
(
)
;
CleanupDeviceD3D
(
)
;
::
DestroyWindow
(
hwnd
)
;
::
UnregisterClass
(
wc
.
lpszClassName
,
wc
.
hInstance
)
;
return
0
;
}
bool
CreateDeviceD3D
(
HWND hwnd
)
{
if
(
(
g_pD3D
=
Direct3DCreate9
(
D3D_SDK_VERSION
)
)
==
NULL
)
return
false
;
// Create the D3DDevice
ZeroMemory
(
&
g_d3dpp
,
sizeof
(
g_d3dpp
)
)
;
g_d3dpp
.
Windowed
=
TRUE
;
g_d3dpp
.
SwapEffect
=
D3DSWAPEFFECT_DISCARD
;
g_d3dpp
.
BackBufferFormat
=
D3DFMT_UNKNOWN
;
// Need to use an explicit format with alpha if needing per-pixel alpha composition.
g_d3dpp
.
EnableAutoDepthStencil
=
TRUE
;
g_d3dpp
.
AutoDepthStencilFormat
=
D3DFMT_D16
;
g_d3dpp
.
PresentationInterval
=
D3DPRESENT_INTERVAL_ONE
;
// Present with vsync
//g_d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; // Present without vsync, maximum unthrottled framerate
if
(
g_pD3D
->
CreateDevice
(
D3DADAPTER_DEFAULT
,
D3DDEVTYPE_HAL
,
hwnd
,
D3DCREATE_HARDWARE_VERTEXPROCESSING
,
&
g_d3dpp
,
&
g_pd3dDevice
)
Release
(
)
;
g_pd3dDevice
=
NULL
;
}
if
(
g_pD3D
)
{
g_pD3D
->
Release
(
)
;
g_pD3D
=
NULL
;
}
}
void
ResetDevice
(
)
{
ImGui_ImplDX9_InvalidateDeviceObjects
(
)
;
HRESULT hr
=
g_pd3dDevice
->
Reset
(
&
g_d3dpp
)
;
if
(
hr
==
D3DERR_INVALIDCALL
)
IM_ASSERT
(
0
)
;
ImGui_ImplDX9_CreateDeviceObjects
(
)
;
}
// Forward declare message handler from imgui_impl_win32.cpp
extern
IMGUI_IMPL_API LRESULT
ImGui_ImplWin32_WndProcHandler
(
HWND hWnd
,
UINT msg
,
WPARAM wParam
,
LPARAM lParam
)
;
// Win32 message handler
LRESULT WINAPI
WndProc
(
HWND hWnd
,
UINT msg
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
ImGui_ImplWin32_WndProcHandler
(
hWnd
,
msg
,
wParam
,
lParam
)
)
return
true
;
switch
(
msg
)
{
case
WM_SIZE
:
if
(
g_pd3dDevice
!=
NULL
&&
wParam
!=
SIZE_MINIMIZED
)
{
g_d3dpp
.
BackBufferWidth
=
LOWORD
(
lParam
)
;
g_d3dpp
.
BackBufferHeight
=
HIWORD
(
lParam
)
;
ResetDevice
(
)
;
}
return
0
;
case
WM_SYSCOMMAND
:
if
(
(
wParam
&
0xfff0
)
==
SC_KEYMENU
)
return
0
;
break
;
case
WM_DESTROY
:
::
PostQuitMessage
(
0
)
;
return
0
;
}
return
::
DefWindowProc
(
hWnd
,
msg
,
wParam
,
lParam
)
;
}
|