я так понимаю у тебя десктоп, тогда вот:
во первых в создании окна заменяешь флаг
CreateWindow(wc.lpszClassName, _T("\x00\x00\x00\x00"), WS_OVERLAPPEDWINDOW, 100, 100, 658, 489, NULL, NULL, wc.hInstance, NULL);
на
CreateWindow(wc.lpszClassName, _T("\x00\x00\x00\x00"), WS_POPUP, 100, 100, 658, 489, NULL, NULL, wc.hInstance, NULL);
дальше лезешь в WndProc и если (насколько я понимаю) у тебя обычный имгуй, который ты юзаешь для десктоп приложухи, то меняй свой WndProc, на вот этот (ну или просто вставь кейсы WM_LBUTTONDOWN + WM_MOUSEMOVE) -
POINTS m_Pos;
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))
return true;
switch (msg)
{
case WM_LBUTTONDOWN:
{
m_Pos = MAKEPOINTS(lParam);
return 0;
}
case WM_MOUSEMOVE:
{
if (wParam == MK_LBUTTON)
{
POINTS p = MAKEPOINTS(lParam);
RECT rect;
GetWindowRect(hWnd, &rect);
rect.left += p.x - m_Pos.x;
rect.top += p.y - m_Pos.y;
if (m_Pos.x >= 0 && m_Pos.x <= 700 - 20 &&
m_Pos.y >= 0 && m_Pos.y <= 30 )
SetWindowPos(hWnd, NULL, rect.left, rect.top, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOZORDER);
}
return 0;
}
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);
}
изменить directx если он у тебя другой не составит труда даже новичку, так что как-то так, удачи
если что-то не понял - обращайся в личку форума, хайд или дс