系统分辨率为1024*768
窗体的size为1200*800
StartPosition设置为CenterScreen,WindowsState为Maximized
如何在不调整分辨率,且不调整窗体布局的条件下,使窗体大小自适应系统的分辨率?

解决方案 »

  1.   

    下面的代码实现修改显示器分辨率和刷新频率的功能: 
       
      using System; 
      using System.Drawing; 
      using System.Collections; 
      using System.ComponentModel; 
      using System.Windows.Forms; 
      using System.Data; 
      using System.Runtime.InteropServices; 
       
      namespace ScreenResolution 
      { 
       
       public class Form1 : System.Windows.Forms.Form 
       { 
       public enum DMDO 
       { 
       DEFAULT = 0, 
       D90 = 1, 
       D180 = 2, 
       D270 = 3 
       } 
       
       [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)] 
       struct DEVMODE 
       { 
       public const int DM_DISPLAYFREQUENCY = 0x400000; 
       public const int DM_PELSWIDTH = 0x80000; 
       public const int DM_PELSHEIGHT = 0x100000; 
       private const int CCHDEVICENAME = 32; 
       private const int CCHFORMNAME = 32; 
       
       [MarshalAs(UnmanagedType.ByValTStr, SizeConst=CCHDEVICENAME)] 
       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 DMDO dmDisplayOrientation; 
       public int dmDisplayFixedOutput; 
       
       public short dmColor; 
       public short dmDuplex; 
       public short dmYResolution; 
       public short dmTTOption; 
       public short dmCollate; 
       [MarshalAs(UnmanagedType.ByValTStr, SizeConst=CCHFORMNAME)] 
       public string dmFormName; 
       public short dmLogPixels; 
       public int 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; 
       } 
       
       [DllImport("user32.dll", CharSet=CharSet.Auto)] 
       //static extern int ChangeDisplaySettings( DEVMODE lpDevMode, int dwFlags); 
       
       static extern int ChangeDisplaySettings( [In] ref DEVMODE lpDevMode, int dwFlags); 
       private System.ComponentModel.Container components = null; 
       public Form1() 
       { 
       InitializeComponent(); 
       } 
       protected override void Dispose( bool disposing ) 
       { 
       if( disposing ) 
       { 
       if (components != null) 
       { 
       components.Dispose(); 
       } 
       } 
       base.Dispose( disposing ); 
       } 
       
       #region Windows Form Designer generated code 
       private void InitializeComponent() 
       { 
       this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); 
       this.ClientSize = new System.Drawing.Size(292, 273); 
       this.Text = "改变屏幕分辨率的例子"; 
       
       } 
       #endregion 
       
       static void Main() 
       { 
       Form1 r = new Form1(); 
       r.ChangeRes(); 
       Application.Run(new Form1()); 
       } 
       
       void ChangeRes() 
       { 
       Form1 t = new Form1(); 
       long RetVal=0; 
       DEVMODE dm = new DEVMODE(); 
       dm.dmSize= (short)Marshal.SizeOf(typeof(DEVMODE)); 
       dm.dmPelsWidth = 1024; 
       dm.dmPelsHeight= 768; 
       dm.dmDisplayFrequency=85; 
       dm.dmFields = DEVMODE.DM_PELSWIDTH | DEVMODE.DM_PELSHEIGHT | DEVMODE.DM_DISPLAYFREQUENCY; 
       RetVal = ChangeDisplaySettings(ref dm, 0); 
       } 
       } 
      }