नमूना कार्यक्रम पर पूर्ण स्क्रीन समर्थन जोड़ने के दौरान, मैंने इस छोटे से परेशान व्यवहार पर ठोकर खाई।डायरेक्टएक्स 11 स्वैपचेन और खिड़की पूर्णस्क्रीन स्थिति खोने
एक पूर्ण स्क्रीन विंडो बनाना काम करता है, लेकिन जैसे ही मैं अपनी पूर्णस्क्रीन विंडो वाली आउटपुट पर किसी भी विंडो (किसी अन्य एप्लिकेशन से) ले जाता हूं, यह स्वचालित रूप से विंडो पर वापस स्विच करता है।
क्या इस व्यवहार को रोकने के लिए कोई तरीका है (इसलिए पूर्ण स्क्रीन विंडो खिड़की पर वापस नहीं जाती है)?
एक संदर्भ के रूप में, यह एक छोटा सा स्टैंडअलोन उदाहरण है (इसलिए समस्या को आसानी से दोहराया जा सकता है)।
यदि यह उपयोगी है, तो भी मैं विंडोज 8.1 पर चल रहा हूं।
मैं पहले से ही,, WindowAssociationFlags और SwapChainFlags बदलने की कोशिश की दोनों कोई सफलता के साथ त्यागें के बजाय FlipSequential का उपयोग कर के रूप में ही
SharpDX.DXGI.Factory2 factory = new SharpDX.DXGI.Factory2();
SharpDX.DXGI.Adapter adapter = factory.GetAdapter(0);
var renderForm1 = new RenderForm("Form 1");
factory.MakeWindowAssociation(renderForm1.Handle, SharpDX.DXGI.WindowAssociationFlags.IgnoreAll);
Device device = new Device(adapter, DeviceCreationFlags.BgraSupport);
SharpDX.DXGI.SwapChainDescription sd = new SharpDX.DXGI.SwapChainDescription()
{
BufferCount = 2,
ModeDescription = new SharpDX.DXGI.ModeDescription(0, 0, new SharpDX.DXGI.Rational(50, 1), SharpDX.DXGI.Format.R8G8B8A8_UNorm),
IsWindowed = true,
OutputHandle = renderForm1.Handle,
SampleDescription = new SharpDX.DXGI.SampleDescription(1,0),
SwapEffect = SharpDX.DXGI.SwapEffect.Discard,
Usage = SharpDX.DXGI.Usage.RenderTargetOutput,
Flags = SharpDX.DXGI.SwapChainFlags.None
};
var swapChain1 = new SharpDX.DXGI.SwapChain(factory, device, sd);
renderForm1.Left = 1922; //Just hardcoded here to move window to second screen
renderForm1.Width = 1920;
renderForm1.Height = 1080;
renderForm1.FormBorderStyle = FormBorderStyle.None;
swapChain1.SetFullscreenState(true, null);
swapChain1.ResizeBuffers(2, 1920, 1080, SharpDX.DXGI.Format.R8G8B8A8_UNorm, SharpDX.DXGI.SwapChainFlags.AllowModeSwitch);
var resource = Texture2D.FromSwapChain<Texture2D>(swapChain1, 0);
var renderView = new RenderTargetView(device, resource);
RenderLoop.Run(renderForm1,() =>
{
device.ImmediateContext.ClearRenderTargetView(renderView, new SharpDX.Color4(1, 0, 0, 1));
swapChain1.Present(1, SharpDX.DXGI.PresentFlags.None);
});
संपादित करें: मैं भी Microsoft से एक C++ नमूना (बस ले लिया इंटरनेट 11 बुनियादी ट्यूटोरियल की कोशिश की और पूर्ण स्क्रीन स्विच जोड़ा गया), यह एक ही व्यवहार की ओर जाता है, इसलिए यह एक SharpDX विशिष्ट समस्या नहीं है।
मैंने संदेश लूप देखा, और एक बार ऐसा होने पर, पहले पूर्णस्क्रीन मोड को वापस विंडो में बदल दिया जाता है, और मुझे WM_DISPLAYCHANGE संदेश प्राप्त होता है)।
जिज्ञासा (विंडोज 8.1 या विंडोज 10 सोचने) से महान विस्तृत उत्तर के लिए धन्यवाद, क्या आपको डायरेक्टएक्स 9 पूर्ण स्क्रीन का उपयोग करके एक ही व्यवहार का सामना करना पड़ेगा (नहीं कि मैं इसे वापस रोल करने की योजना बना रहा हूं, लेकिन इसके बारे में उत्सुक हूं)? – catflier
मुझे लगता है कि डायरेक्ट 3 डी 9 पूर्ण स्क्रीन मोड के अनुकरण के तरीके में कुछ quirks हैं - याद रखें कि "खोया डिवाइस" परिदृश्य वास्तव में Windows Vista + पर मौजूद नहीं है, इसलिए यह व्यवहार भी नकल किया जाता है - लेकिन मुझे विश्वास है कि यह मूल रूप से है वैसी ही स्तिथि। –
डिफ़ॉल्ट रूप से dx9 में यह वास्तव में और भी बदतर है, जैसे ही यह ध्यान केंद्रित करता है, यह स्वयं को छुपाता है, लेकिन कम से कम इसे आसानी से धोखा दिया जा सकता है, ऐसा लगता है कि अब एकमात्र तरीका संसाधन को वापस साझा किया जाएगा ... – catflier