前言
假如屏幕是1920*1080,缩放是125%;
那么WPF窗口最大设置为1536*864就会占满屏幕。
像素无关单位
如图
屏幕1 分辨率 1600x900 缩放 100%
屏幕1 分辨率 1920x1080 缩放 125%
打印值
1 | Console.WriteLine(@"SystemParameters.PrimaryScreenWidth:"+ SystemParameters.PrimaryScreenWidth); |
结果
1 | SystemParameters.PrimaryScreenWidth:1600 |
我们可以看出
PrimaryScreenWidth
获取的是主屏的分辨率/缩放
虚拟尺寸是以主屏的缩放为准,以主屏的左上角为基准点,两个屏幕的最高点为Top,主屏的最低点为Bottom进行计算。
以像素为单位
所在屏幕大小
1 | // 获取当前屏幕工作区的大小 |
可以获取
1 | screenArea.Width |
主屏幕宽高
1 | int screenWidth = Screen.PrimaryScreen.Bounds.Width; |
窗口的位置及大小
1 | /// <summary> |
获取鼠标位置
获取的是屏幕实际像素对应的位置。
1 | using System.Runtime.InteropServices; |
调用
1 | ZPoint.POINT point; |
这样获取的坐标是屏幕的实际尺寸算的,即1920*1080。
如果我们根据这个值设置WPF的窗口就会发生偏移。
WPF坐标转像素坐标
这是相对于窗口的位置所在屏幕的像素位置,所以0,0
就是窗口左上角在屏幕中的像素位置。
1 | Point pointInDIU = new Point(0, 0); // 假设在 DIU 中的坐标为 (0, 0) |
像素坐标转换为WPF坐标
1 | ZPoint.POINT point; |
获取窗口的缩放率
1 | using System; |
调用
1 | ZPoint.POINT point; |
这种作用和下面是一样的。
限制窗口大小
限制窗口不能大于主屏大小,并且窗口在主屏内
1 | this.AddHandler(MouseLeftButtonUpEvent, new MouseButtonEventHandler(UIElement_OnMouseUp), true); |
设置窗口在鼠标右下角
colorWin中添加如下方法
1 | private void MoveBottomRightEdgeOfWindowToMousePosition() |
更新位置
1 | new Thread(o => { |