visual ventanas tamaño resolucion redimensionar pantalla net maximizar mas hacer grande formularios formulario form escala controles como automático ajuste ajustar c# winforms winapi resize

ventanas - Desactiva la configuración ''Mostrar contenido de la ventana mientras arrastras'' mientras se muestran mis formularios de Windows C#



redimensionar controles al maximizar c# (1)

El siguiente código a continuación utilizará la configuración del sistema de ''Mostrar el contenido de la ventana mientras se arrastra'' para volver a colocar la ventana, mientras que temporalmente lo desactivará, mientras cambia el tamaño de la ventana y luego lo configura de nuevo a la configuración del sistema.

Esto le da cambio de tamaño de forma libre de parpadeo en formularios de Windows.

Como esta propiedad es una configuración de usuario que modifica la clave de registro HKEY_CURRENT_USER / Control Panel / Desktop / DragFullWindows, no debería requerir derechos de administrador.

[DllImport("user32.dll", EntryPoint = "SystemParametersInfo", CharSet = CharSet.Auto)] public static extern int GetSystemParametersInfo(int uAction, int uParam, out int lpvParam, int fuWinIni); [DllImport("user32.dll", EntryPoint = "SystemParametersInfo", CharSet = CharSet.Auto)] public static extern int SetSystemParametersInfo(int uAction, int uParam, int lpvParam, int fuWinIni); private const int SPI_GETDRAGFULLWINDOWS = 38; private const int SPI_SETDRAGFULLWINDOWS = 37; private const int WM_SYSCOMMAND = 0x0112; private const int SC_SIZE = 0xF000; //change ''Show window content while dragging'' to false while resizing protected override void WndProc(ref Message m) { if (m.Msg == WM_SYSCOMMAND && (m.WParam.ToInt32() & 0xfff0) == SC_SIZE) { int isDragFullWindow; GetSystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, out isDragFullWindow, 0); if (isDragFullWindow != 0) SetSystemParametersInfo(SPI_SETDRAGFULLWINDOWS, 0, 0, 0); base.WndProc(ref m); if (isDragFullWindow != 0) SetSystemParametersInfo(SPI_SETDRAGFULLWINDOWS, 1, 0, 0); } else { base.WndProc(ref m); } } //reduce control flickering and black stripes when window is resized protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED return cp; } }

Hay una configuración de visualización de ventana llamada ''Mostrar contenido de la ventana mientras se arrastra''.

http://www.thewindowsclub.com/disable-show-windows-contents-while-dragging

Cuando esta configuración está activada, si arrastra una ventana, la ventana se volverá a pintar inmediatamente en la nueva posición. Si cambia el tamaño de una ventana, volverá a pintar la ventana para cada nuevo tamaño de ventana, incluso si aún mantiene presionado el botón del mouse.

Cuando la configuración está desactivada, al arrastrar o cambiar de tamaño la ventana simplemente muestra un contorno de la nueva posición o tamaño de la ventana hasta que suelta el botón del mouse y luego pinta la ventana en la nueva posición o tamaño.

Me gustaría mostrar mis formularios en mi aplicación C # WinForms con la configuración ''Mostrar contenido de la ventana mientras arrastro'' desactivada. Sin embargo, como se trata de una configuración operativa, solo me gustaría que esto sea efectivo para cuando se muestren mis formularios, independientemente de la configuración establecida en el sistema operativo.

¿Hay alguna manera de lograr esto utilizando algunas llamadas de WinAPI para cambiar el comportamiento específicamente para mis formas de ganar?

Si no, ¿hay alguna manera de que pueda cambiar la configuración programáticamente antes de que se muestre mi formulario y restablecerlo después de que se cierre mi formulario? ¿Realizar este cambio requiere derechos de administrador (porque no quiero eso)?