Winforms 在winform C中获取窗口的当前方向#
我得到了当前的方向。窗口方向,如横向、纵向、横向翻转和纵向翻转。我曾尝试在窗口应用程序中实现,但没有得到任何解决方案。在C#如何使用注册表项或在C#中获取和设置方向。winforms中没有窗口方向这回事。Winforms 在winform C中获取窗口的当前方向#,winforms,window,orientation,screen-orientation,Winforms,Window,Orientation,Screen Orientation,我得到了当前的方向。窗口方向,如横向、纵向、横向翻转和纵向翻转。我曾尝试在窗口应用程序中实现,但没有得到任何解决方案。在C#如何使用注册表项或在C#中获取和设置方向。winforms中没有窗口方向这回事。 您可以使用表单的位置和大小属性来设置它的显示矩形,但据我所知,您无法像在打印文档中那样轻松地翻转它的内容。是的,winforms中有窗口方向这样的东西。在winforms中,获取屏幕旋转角度,如0、90180或270。我已经在我的窗口应用程序中实现了这一点 这是NativeMethod类。。。
您可以使用表单的位置和大小属性来设置它的显示矩形,但据我所知,您无法像在打印文档中那样轻松地翻转它的内容。是的,winforms中有窗口方向这样的东西。在winforms中,获取屏幕旋转角度,如0、90180或270。我已经在我的窗口应用程序中实现了这一点 这是NativeMethod类。。。。。。。。。。。。代码
using System;
using System.Runtime.InteropServices;
namespace WindowApplication
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct DEVMODE
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;
public int dmPositionX;
public int dmPositionY;
public int dmDisplayOrientation;
public int dmDisplayFixedOutput;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmFormName;
public short dmLogPixels;
public short dmBitsPerPel;
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;
public int dmICMMethod;
public int dmICMIntent;
public int dmMediaType;
public int dmDitherType;
public int dmReserved1;
public int dmReserved2;
public int dmPanningWidth;
public int dmPanningHeight;
};
public class NativeMethod
{
// PInvoke declaration for EnumDisplaySettings Win32 API
[DllImport("user32.dll", CharSet = CharSet.Ansi)]
public static extern int EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode);
// PInvoke declaration for ChangeDisplaySettings Win32 API
[DllImport("user32.dll", CharSet = CharSet.Ansi)]
public static extern int ChangeDisplaySettings(ref DEVMODE lpDevMode, int dwFlags);
// helper for creating an initialized DEVMODE structure
public static DEVMODE CreateDevmode()
{
DEVMODE dm = new DEVMODE();
dm.dmDeviceName = new String(new char[32]);
dm.dmFormName = new String(new char[32]);
dm.dmSize = (short)Marshal.SizeOf(dm);
return dm;
}
// constants
public const int ENUM_CURRENT_SETTINGS = -1;
public const int DISP_CHANGE_SUCCESSFUL = 0;
public const int DISP_CHANGE_BADDUALVIEW = -6;
public const int DISP_CHANGE_BADFLAGS = -4;
public const int DISP_CHANGE_BADMODE = -2;
public const int DISP_CHANGE_BADPARAM = -5;
public const int DISP_CHANGE_FAILED = -1;
public const int DISP_CHANGE_NOTUPDATED = -3;
public const int DISP_CHANGE_RESTART = 1;
public const int DMDO_DEFAULT = 0;
public const int DMDO_90 = 1;
public const int DMDO_180 = 2;
public const int DMDO_270 = 3;
}
}
在主表格中使用blow代码
private string[] orientationNames = new string[4] { "Default", "90", "180", "270" };
private int[] orientationValues = new int[4]{NativeMethod.DMDO_DEFAULT,
NativeMethod.DMDO_90,
NativeMethod.DMDO_180,
NativeMethod.DMDO_270};
public static RotateFlipType currentOrientation { get; set; }
public void ChangeDisplaySettings() {
DEVMODE dm = NativeMethod.CreateDevmode();
GetSettings(ref dm);
switch (dm.dmDisplayOrientation)
{
case 0:
currentOrientation = RotateFlipType.RotateNoneFlipX;
break;
case 1:
currentOrientation = RotateFlipType.Rotate270FlipNone;
break;
case 2:
currentOrientation = RotateFlipType.Rotate180FlipX;
break;
case 3:
currentOrientation = RotateFlipType.Rotate90FlipNone;
break;
}
}
protected void SystemEvents_DisplaySettingsChanged(object sender, EventArgs events)
{
ChangeDisplaySettings();
}
主模板建造师
public MainForm()
{
SystemEvents.DisplaySettingsChanged += new EventHandler(SystemEvents_DisplaySettingsChanged);
ChangeDisplaySettings();
}
我没有说这是不可能的,我说没有这样的事情(这意味着没有现成的解决方案),我没有任何解决方案。我已经使用了上面的代码,但有些设备有默认的横向或纵向。我没有看到风景画,肖像画,风景画翻转,肖像画翻转。如果你有解决办法,请给我解决办法。。