2021-10-11

本文详细介绍了在WPF应用程序中如何根据窗口状态和屏幕配置正确计算弹出信息提示框的位置。讨论了正常模式和最大化模式下的窗口坐标计算,以及多屏幕环境和屏幕缩放比例的影响。通过实例代码展示了如何处理这些问题,确保信息提示框始终出现在主窗口右下角。
摘要由CSDN通过智能技术生成

WPF 计算屏幕位置

需求:在主窗口右下角弹出信息提示框

过程:

1.右下角弹出,首先要知道主窗口的位置,再根据主窗口的宽和高计算右下角的位置:

        右下角(mainWindow.Left + mainWindow.ActualWidth,mainWindow.Top + mainWindow.ActualHeight);

        此方法可以得到主窗口的右下角,但是,这是在主窗口的WindowState为:Normal情况下;如果主窗口WindowState为:Maximized,计算就会出错,因为Left和Top的值并不会变化,还是为Normal时的值。因为主窗口已经最大化,所以可以计算整个屏幕的Width和Height,来得到屏幕的右下角。

2.屏幕右下角计算(Maximized模式):

        如果就一块屏幕,起始点(0,0),还可以用上面的计算公式:右下角(0 + mainWindow.ActualWidth,0 + mainWindow.ActualHeight);

        如果有多块屏幕就需要计算当前屏幕的位置,当前屏幕在多块屏幕中的位置(x,y),也是当前屏幕的起始位置,当前屏幕获取:

                     System.Drawing.Rectangle Rectangle = new System.Drawing.Rectangle((int)mainWindow.Left, (int)mainWindow.Top, (int)mainWindow.Width, (int)mainWindow.Height);
                    System.Windows.Forms.Screen s = System.Windows.Forms.Screen.FromRectangle(Rectangle);

        右下角(s.WorkingArea.X + s.WorkingArea.Width,s.WorkingArea.Y + s.WorkingArea.Height); 到此,不管主窗口是正常模式还是最大化,屏幕的单屏还是多屏,都可以找到右下角了。(正常模式,多屏和单屏一样计算,1即可)

        但是,你以为到这里就结束了吗?还有一个因素会影响位置的计算,那就是屏幕的缩放比,正常都是100%,但是在非100%的情况下,屏幕的像素值会发生变化。这里又分为两种情况:

        一、主屏是100%,副屏含有非100%,此种情况上面计算不受影响。

        二、主屏非100%,副屏100%,举个例子:

                主屏: 125%   像素:1920 x 1080  实际:1536 x 864

                副屏: 100%   像素:1920 x 1080

        在程序中获取屏幕的值时:

                主屏:像素:1920 x 1080,副屏:像素:2400 x 1350

        也就是说,当主屏的缩放比增大或缩小时,并不会改变主屏的像素值,只会将副屏的像素值做对应的修改。所以此种情况下要将所有值除以主屏的缩放比。

总结:

        在定位计算像素时,可以灵活的计算窗口的Left,Top,ActualWidth,ActualHeight,或显示窗口的屏幕WorkingArea值,影响计算的因素有:窗口的WindowState,屏幕的个数和屏幕的缩放比。(注意区分文中的主窗口和主屏幕)

最后上我的代码:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值