Как визуализировать в строке заголовка с D3D11 в Windows 7? - PullRequest
1 голос
/ 09 мая 2019

У меня есть программа, которая рендерится в свопчейн D3D11, созданный с IDXGIFactory2::CreateSwapChainForHwnd.Он очищает цепочку подкачки до определенного цвета, особенно зеленого, и рисует текстурированный прямоугольник.Следуя инструкциям на https://docs.microsoft.com/en-us/windows/desktop/dwm/customframe,, я расширил заголовок окна вниз, используя DwmExtendFrameIntoClientArea, и расширил область клиента до всего окна, обработав сообщение WM_NCCALCSIZE.Когда представлена ​​цепочка обмена, содержимое буфера цепочки обмена отображается в верхней части окна, полностью закрывая DWM-нарисованную стеклянную рамку и кнопки с надписями.Как я могу оставить области стеклянной рамки и кнопок надписей для рисования DWM, все еще рисуя в оконной рамке, используя D3D11?

Я уже пытался очистить RenderTargetView до цвета {0.0f, 0.0f, 0.0f, 0.0f}с ID3D11DeviceContext::ClearRenderTargetView, но альфа-компонент, похоже, игнорируется.Я пытался указать DXGI_ALPHA_MODE_STRAIGHT и DXGI_ALPHA_MODE_PREMULTIPLIED в элементе AlphaMode DXGI_SWAP_CHAIN_DESC1, который использовался для создания цепочки подкачки, но он вылетает, потому что альфа-смешанные цепочки подкачки должны быть созданы CreateSwapChainForComposition или CreateSwapChainForCoreWindow.Эти функции нежизнеспособны, поскольку я хотел бы поддерживать Windows 7.

Еще одна вещь, которую я попробовал, - это создание состояния наложения и прозрачности частей текстуры.Все это смешивает прозрачные части текстуры с чистым цветом.Однако DWM ничего не обрабатывает.

...