popup non topmost
2024-08-21 09:27:09
public class PopupNonTopmost : Popup
{
public static DependencyProperty TopmostProperty = Window.TopmostProperty.AddOwner(
typeof(PopupNonTopmost),
new FrameworkPropertyMetadata(false, OnTopmostChanged)); public bool Topmost
{
get { return (bool)GetValue(TopmostProperty); }
set { SetValue(TopmostProperty, value); }
} private static void OnTopmostChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
(obj as PopupNonTopmost).UpdateWindow();
} protected override void OnOpened(EventArgs e)
{
UpdateWindow();
} private void UpdateWindow()
{
var hwnd = ((HwndSource)PresentationSource.FromVisual(this.Child)).Handle;
RECT rect; if (GetWindowRect(hwnd, out rect))
{
SetWindowPos(hwnd, Topmost ? -1 : -2, rect.Left, rect.Top, (int)this.Width, (int)this.Height, 0);
}
} #region P/Invoke imports & definitions [StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
} [DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect); [DllImport("user32", EntryPoint = "SetWindowPos")]
private static extern int SetWindowPos(IntPtr hWnd, int hwndInsertAfter, int x, int y, int cx, int cy, int wFlags); #endregion
}
最新文章
- js入门学习~ 运动应用小例
- 从问题看本质:socket到底是什么?
- 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
- python的正则表达式
- Hibernate的ORM原理和实现
- 【JAVA 文件概述】
- Window对象简介
- sql 批量更新
- 洛谷P1467 循环数 Runaround Numbers
- Android Studio @Bind的用法,自动生成findViewById无需再实例化控件
- 第二篇:python基础之文件读写
- bzoj2124 等差子序列(hash+线段树)
- JS原型、原型链深入理解
- [bzoj3953] [WF2013]Self-Assembly
- IntelliJ IDEA启动Tomcat后,却无法访问Tomcat主页 等一系列问题
- noi.ac 第五场第六场
- Java微信二次开发(九)
- Unity Standard Assets Example Project
- numpy.random.randn()与numpy.random.rand()的区别(转)
- 整理OpenResty+Mysql+Tomcat+JFinal+Cannal+HUI