Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 在winform C中获取窗口的当前方向#_Winforms_Window_Orientation_Screen Orientation - Fatal编程技术网

Winforms 在winform C中获取窗口的当前方向#

Winforms 在winform C中获取窗口的当前方向#,winforms,window,orientation,screen-orientation,Winforms,Window,Orientation,Screen Orientation,我得到了当前的方向。窗口方向,如横向、纵向、横向翻转和纵向翻转。我曾尝试在窗口应用程序中实现,但没有得到任何解决方案。在C#如何使用注册表项或在C#中获取和设置方向。winforms中没有窗口方向这回事。 您可以使用表单的位置和大小属性来设置它的显示矩形,但据我所知,您无法像在打印文档中那样轻松地翻转它的内容。是的,winforms中有窗口方向这样的东西。在winforms中,获取屏幕旋转角度,如0、90180或270。我已经在我的窗口应用程序中实现了这一点 这是NativeMethod类。。。

我得到了当前的方向。窗口方向,如横向、纵向、横向翻转和纵向翻转。我曾尝试在窗口应用程序中实现,但没有得到任何解决方案。在C#如何使用注册表项或在C#中获取和设置方向。

winforms中没有窗口方向这回事。

您可以使用表单的位置和大小属性来设置它的显示矩形,但据我所知,您无法像在打印文档中那样轻松地翻转它的内容。

是的,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();
}

我没有说这是不可能的,我说没有这样的事情(这意味着没有现成的解决方案),我没有任何解决方案。我已经使用了上面的代码,但有些设备有默认的横向或纵向。我没有看到风景画,肖像画,风景画翻转,肖像画翻转。如果你有解决办法,请给我解决办法。。