示例#1
0
        /// <summary>
        /// Full screen mode or un-do full screen mode.
        /// </summary>
        public void FullScreenMode()
        {
            int hr = 0;

            // Stop and reset postion to beginning
            if ((_currentState == PlayState.Paused) || (_currentState == PlayState.Running) || (_currentState == PlayState.Stopped))
            {
                OABool mode;

                // Don't bother with full-screen for audio-only files
                if ((_isAudioOnly) || (_videoWindow == null))
                {
                    return;
                }

                // Read current state
                hr = _videoWindow.get_FullScreenMode(out mode);
                DsError.ThrowExceptionForHR(hr);

                if (mode == OABool.False)
                {
                    // Save current message drain
                    hr = _videoWindow.get_MessageDrain(out _pDrain);
                    DsError.ThrowExceptionForHR(hr);

                    // Set message drain to application main window
                    hr = _videoWindow.put_MessageDrain(_playWindow.Handle);
                    DsError.ThrowExceptionForHR(hr);

                    // Switch to full-screen mode
                    mode = OABool.True;
                    hr   = _videoWindow.put_FullScreenMode(mode);
                    DsError.ThrowExceptionForHR(hr);
                    _isFullScreen = true;
                }
                else
                {
                    // Switch back to windowed mode
                    mode = OABool.False;
                    hr   = _videoWindow.put_FullScreenMode(mode);
                    DsError.ThrowExceptionForHR(hr);

                    // Undo change of message drain
                    hr = _videoWindow.put_MessageDrain(_pDrain);
                    DsError.ThrowExceptionForHR(hr);

                    // Reset video window
                    hr = _videoWindow.SetWindowForeground(OABool.True);
                    DsError.ThrowExceptionForHR(hr);

                    // Reclaim keyboard focus for player application
                    //this.Focus();
                    _isFullScreen = false;
                }
            }
        }
示例#2
0
        ////////////////
        /// Get/Set MessageDrain
        private void TestMessageDrain()
        {
            int    hr;
            IntPtr MessageDrain1, MessageDrain2;

            // Read the current value
            hr = m_ivw.get_MessageDrain(out MessageDrain1);
            Marshal.ThrowExceptionForHR(hr);

            // Change it
            hr = m_ivw.put_MessageDrain((IntPtr)(MessageDrain1.ToInt32() + 1));
            Marshal.ThrowExceptionForHR(hr);

            // Re-read
            hr = m_ivw.get_MessageDrain(out MessageDrain2);
            Marshal.ThrowExceptionForHR(hr);

            // Put it back to null
            hr = m_ivw.put_MessageDrain(IntPtr.Zero);
            Marshal.ThrowExceptionForHR(hr);

            // Make sure the value we set is what we just read
            Debug.Assert(MessageDrain1.ToInt32() + 1 == MessageDrain2.ToInt32(), "get/set MessageDrain");
        }