Собственно как?
На каком то сайте читал что сам Direct2D в полноэкранный режим переводить не умеет, поэтому надо использовать либо возможности WinAPI, либо direct3d.
Нагуглил код для перевода в фуллскрин:
void SetFullScreenMode(HWND hwnd)
{
static WINDOWPLACEMENT g_wpPrev = { sizeof(g_wpPrev) };
DWORD dwStyle = GetWindowLong(hwnd, GWL_STYLE);
if (dwStyle & WS_OVERLAPPEDWINDOW) {
MONITORINFO mi = { sizeof(mi) };
if (GetWindowPlacement(hwnd, &g_wpPrev) &&
GetMonitorInfo(MonitorFromWindow(hwnd,
MONITOR_DEFAULTTOPRIMARY), &mi)) {
SetWindowLong(hwnd, GWL_STYLE,
dwStyle & ~WS_OVERLAPPEDWINDOW);
SetWindowPos(hwnd, HWND_TOP,
mi.rcMonitor.left, mi.rcMonitor.top,
mi.rcMonitor.right - mi.rcMonitor.left,
mi.rcMonitor.bottom - mi.rcMonitor.top,
SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
}
} else {
//Перевод обратно в оконный режим
}
}
И все бы замечательно, но в полноэкранном режиме перестает работать следующий код direct2d
ID2D1Factory* pD2DFactory = NULL;
HRESULT hr = D2D1CreateFactory(
D2D1_FACTORY_TYPE_SINGLE_THREADED,
&pD2DFactory);
// Obtain the size of the drawing area.
RECT rc;
GetClientRect(hWnd, &rc);
// Create a Direct2D render target
ID2D1HwndRenderTarget* pRT = NULL;
hr = pD2DFactory->CreateHwndRenderTarget(
D2D1::RenderTargetProperties(),
D2D1::HwndRenderTargetProperties(
hWnd,
D2D1::SizeU(
rc.right - rc.left,
rc.bottom - rc.top)),
&pRT);
//Create a Brush
ID2D1SolidColorBrush* pBlackBrush = NULL;
if (SUCCEEDED(hr))
{
pRT->CreateSolidColorBrush(
D2D1::ColorF(D2D1::ColorF::Black),
&pBlackBrush
);
}
А именно SUCCEEDED(hr) возвращает false(иначе говоря CreateHwndRenderTarget() возвращает ошибку).
При переходе обратно в оконный режим все опять работает.
P.S. С WinAPI, direct2d только знакомлюсь, т.ч. если можно объяснение максимально простым языком.