BetterExplorerControls.AirspacePopup.SetTopmostState C# (CSharp) Method

SetTopmostState() private method

private SetTopmostState ( bool isTop ) : void
isTop bool
return void
		private void SetTopmostState(bool isTop) {
			// Don’t apply state if it’s the same as incoming state
			if (m_appliedTopMost.HasValue && m_appliedTopMost == isTop) {
				return;
			}

			if (Child == null)
				return;

			var hwndSource = (PresentationSource.FromVisual(Child)) as HwndSource;

			if (hwndSource == null)
				return;
			var hwnd = hwndSource.Handle;

			RECT rect;

			if (!GetWindowRect(hwnd, out rect))
				return;

			Debug.WriteLine("setting z-order " + isTop);

			if (isTop) {
				SetWindowPos(hwnd, HWND_TOPMOST, rect.Left, rect.Top, (int)Width, (int)Height, TOPMOST_FLAGS);
			}
			else {
				// Z-Order would only get refreshed/reflected if clicking the
				// the titlebar (as opposed to other parts of the external
				// window) unless I first set the popup to HWND_BOTTOM
				// then HWND_TOP before HWND_NOTOPMOST
				SetWindowPos(hwnd, HWND_BOTTOM, rect.Left, rect.Top, (int)Width, (int)Height, TOPMOST_FLAGS);
				SetWindowPos(hwnd, HWND_TOP, rect.Left, rect.Top, (int)Width, (int)Height, TOPMOST_FLAGS);
				SetWindowPos(hwnd, HWND_NOTOPMOST, rect.Left, rect.Top, (int)Width, (int)Height, TOPMOST_FLAGS);
			}

			m_appliedTopMost = isTop;
		}

Usage Example

Example #1
0
        private static void OnIsTopmostChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
        {
            AirspacePopup airspacePopup = source as AirspacePopup;

            airspacePopup.SetTopmostState(airspacePopup.IsTopmost);
        }