Минимизация окна DirectX 10 на вкладке Alt

Я пытался заставить мое приложение DirectX 10 правильно обрабатывать альтернативные вкладки в полноэкранном режиме. Когда я переключаю вкладку в полноэкранном режиме, приложение автоматически переходит в оконный режим.

Я попытался прослушать WM_ACTIVATEAPP, чтобы вручную свернуть и развернуть программу. Это работает, но это нарушает другие функции в программе, которая уже работала (переключение между полноэкранным и оконным). В первый раз, когда я пытаюсь выйти из полноэкранного режима после восстановления с вкладки alt, мигает черный экран, и он остается в полноэкранном режиме, во второй раз он запускает WM_ACTIVATEAPP, вызывая сворачивание всей программы вместо правильного перехода в оконный режим. ,

Ниже приведен код, который я использую:

На WM_SIZE:

mD3D->ResizeBuffers(width, height);
mBufferWidth = width;
mBufferHeight = height;
mViewport.SetViewportRect(0, 0, width, height);
mD3D->GetDevice()->RSSetViewports(1, &mViewport.GetViewport());

На WM_ACTIVATEAPP:

if(wParam == TRUE && mSwapChainDesc.Windowed == FALSE)
{
// Restore
ChangeDisplaySettings(NULL, CDS_FULLSCREEN);
mSwapChain->SetFullscreenState(TRUE, NULL);
mSwapChainDesc.Windowed = FALSE;
ResizeBuffers(mBufferWidth, mBufferHeight);
}
else if(wParam == FALSE && mSwapChainDesc.Windowed == FALSE)
{
// Minimize
ShowWindow(hwnd, SW_SHOWMINNOACTIVE);
mSwapChain->SetFullscreenState(FALSE, NULL);
ChangeDisplaySettings(NULL, 0);
}

При переключении запроса оконного режима:

if(mSwapChainDesc.Windowed)
{
mSwapChain->SetFullscreenState(TRUE, NULL);
mSwapChainDesc.Windowed = FALSE;
}
else
{
mSwapChain->SetFullscreenState(FALSE, NULL);
mSwapChainDesc.Windowed = TRUE;
}
ResizeBuffers(mBufferWidth, mBufferHeight);

ResizeBuffers:

mDevice->OMSetRenderTargets(0, 0, 0);

// Release all outstanding references to the swap chain's buffers.
mRenderTargetView->Release();

HRESULT hr;
// Preserve the existing buffer count and format.
// Automatically choose the width and height to match the client rect for HWNDs.
hr = mSwapChain->ResizeBuffers(1, width, height, DXGI_FORMAT_UNKNOWN, 0);

// Get buffer and create a render-target-view.
ID3D10Texture2D* pBuffer;
hr = mSwapChain->GetBuffer(0, __uuidof( ID3D10Texture2D), (void**) &pBuffer );

hr = mDevice->CreateRenderTargetView(pBuffer, NULL, &mRenderTargetView);
pBuffer->Release();

mDevice->OMSetRenderTargets(1, &mRenderTargetView, NULL );

// Set up the viewport.
D3D10_VIEWPORT vp;
vp.Width = width;
vp.Height = height;
vp.MinDepth = 0.0f;
vp.MaxDepth = 1.0f;
vp.TopLeftX = 0;
vp.TopLeftY = 0;
mDevice->RSSetViewports( 1, &vp );

Как я могу свернуть окно и по-прежнему поддерживать возможность переключения между оконным и полноэкранным режимами с DirectX 10?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]