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; // - 20 ниже - если есть кнопка закрытия окна внутри самого окна
if (m_Pos.x >= 0 && m_Pos.x <= 700 - 20 && // 700 - ширина окна, ставь своё значение
m_Pos.y >= 0 && m_Pos.y <= 30 /* или ImGui::GetFontSize() + ImGui::GetStyle().FramePadding.y * 4.0f*/) // насколько высокой будет рамка за которую можно потянуть окно
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) // Disable ALT application menu
return 0;
break;
case WM_DESTROY:
::PostQuitMessage(0);
return 0;
}
return ::DefWindowProc(hWnd, msg, wParam, lParam);
}