Pau*_*ams 75
您是否只需要标准应用程序将使用的区域,即排除Windows任务栏和停靠窗口?如果是这样,请使用Screen.WorkingArea属性.否则,请使用Screen.Bounds.
如果有多个显示器,则需要从表单中获取屏幕,即
Form myForm;
Screen myScreen = Screen.FromControl(myForm);
Rectangle area = myScreen.WorkingArea;
Run Code Online (Sandbox Code Playgroud)
如果您想知道哪个是主显示屏幕,请使用Screen.Primary属性.此外,您还可以从Screen.AllScreens属性中获取屏幕列表.
给定的答案是正确的,就其而言.但是,当您将文本大小设置为超过125%时,Windows(和.NET)会开始大约相当于屏幕大小,以便为您进行自动缩放.
大多数情况下,这不是问题 - 您通常希望Windows和.NET执行此操作.但是,如果您确实需要知道屏幕上的实际像素数(例如,您想直接绘制到桌面DC),则可以执行以下操作.我只在Win10上试过这个.YMMV在其他Windows版本上.
到目前为止,如果您不想全局关闭应用中的DPI感知,这是我发现获得真正的屏幕像素数的唯一方法.请注意,此示例获取主显示大小 - 您需要修改它以获取其他屏幕.
[DllImport("User32.dll")]
static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
static extern int ReleaseDC(IntPtr hwnd, IntPtr dc);
[DllImport("gdi32.dll")]
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
IntPtr primary = GetDC(IntPtr.Zero);
int DESKTOPVERTRES = 117;
int DESKTOPHORZRES = 118;
int actualPixelsX = GetDeviceCaps(primary, DESKTOPHORZRES);
int actualPixelsY = GetDeviceCaps(primary, DESKTOPVERTRES);
ReleaseDC(IntPtr.Zero, primary);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
30918 次 |
最近记录: |