2016-01-18 3 views
2

Я получаю текущую ориентацию окна. ориентация окна, например, пейзаж, портрет, пейзаж и перевернутый портрет. Я попытался реализовать в окне приложения, но не получил никакого решения. В C# как получить и установить ориентацию с помощью раздела реестра или в C#.Получить текущую ориентацию окна в winform C#

ответ

0

В winforms нет такой ориентации, как ориентация окна.
Вы можете использовать свойства формы и размера формы, чтобы установить прямоугольник отображения, но насколько я знаю, вы не можете легко перевернуть его содержимое, как в печатном документе.

+0

У меня нет никакого решения. У меня есть использование выше кода, но некоторые устройства имеют пейзаж по умолчанию или некоторые имеют портрет. Я не получаю пейзаж, портрет, пейзаж, перевернутый портрет. Если у вас есть решение, пожалуйста, дайте мне решение .. –

1

Да, есть такая вещь, как ориентация окна в winforms. В winforms получите угол поворота экрана, например 0,90, 180 или 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; 
    } 
} 

Используйте удар код в основной форме ........... .

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

Show in details

+1

Я не сказал, что это невозможно, я сказал, что нет такой вещи (что означает, что для этого нет готового решения) – ATC

Смежные вопросы