Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Con MFC en Visual Studio 2015, puede crear diálogos que el usuario pueda cambiar de tamaño y puede controlar la forma en que el diseño se ajusta al cambio de tamaño. Por ejemplo, puede adjuntar botones en la parte inferior de un cuadro de diálogo al borde inferior para que siempre permanezcan en la parte inferior. También puede configurar determinados controles, como cuadros de lista, cuadros de edición y campos de texto para expandirse a medida que el usuario expande el cuadro de diálogo.
Especificar la configuración de diseño dinámico para un cuadro de diálogo MFC
Cuando el usuario cambia el tamaño de un cuadro de diálogo, los controles del cuadro de diálogo pueden cambiar el tamaño o moverse en las direcciones X e Y. Cambio de tamaño o posición de un control cuando el usuario cambia el tamaño de un cuadro de diálogo se denomina diseño dinámico. Por ejemplo, lo siguiente es un cuadro de diálogo antes de cambiar el tamaño:
Después de cambiar el tamaño, el área del cuadro de lista aumenta para mostrar más elementos y los botones se mueven junto con la esquina inferior derecha:
Puede controlar el diseño dinámico especificando los detalles de cada control en el Editor de recursos del IDE, o bien puede hacerlo mediante programación accediendo al CMFCDynamicLayout
objeto de un control determinado y estableciendo las propiedades.
Establecimiento de propiedades de diseño dinámico en el editor de recursos
Puede establecer el comportamiento de diseño dinámico de un cuadro de diálogo sin tener que escribir ningún código mediante el editor de recursos.
Para establecer las propiedades de diseño dinámico en el editor de recursos
Con un proyecto de MFC abierto, abra el cuadro de diálogo con el que desea trabajar en el editor de diálogos.
Seleccione un control y, en la ventana Propiedades (en la vista de clases), establezca sus propiedades de diseño dinámico. La sección Diseño dinámico de la ventana Propiedades contiene las propiedades Mover tipo, Tipo de ajuste de tamaño y, dependiendo de los valores seleccionados para esas propiedades, propiedades específicas que definen la cantidad de controles que mueven o cambian el tamaño. Mover tipo determina cómo se mueve un control a medida que cambia el tamaño del cuadro de diálogo; El tipo de ajuste de tamaño determina cómo se cambia el tamaño de un control a medida que cambia el tamaño del cuadro de diálogo. Mover tipo y tipo de ajuste de tamaño puede ser Horizontal, Vertical, Ambos o Ninguno en función de las dimensiones que desee cambiar dinámicamente. Horizontal es la dimensión X; Vertical es la dirección Y.
Si desea que un control como un botón tenga un tamaño fijo y permanezca en su lugar en la parte inferior derecha, como es habitual para los botones Aceptar o Cancelar , establezca el Tipo de ajuste de tamaño en Ninguno y establezca el Tipo de movimiento en Ambos. Para los valores De movimiento X y Y en Tipo demovimiento, establezca 100% para hacer que el control permanezca una distancia fija desde la esquina inferior derecha.
Supongamos que también tiene un control que desea expandir a medida que se expande el cuadro de diálogo. Normalmente, un usuario podría expandir un cuadro de diálogo para expandir un cuadro de edición de varias líneas para aumentar el tamaño del área de texto o puede expandir un control de lista para ver más datos. En este caso, establezca el tipo de ajuste de tamaño en Ambos y establezca el tipo de movimiento en ninguno. A continuación, establezca los valores Sizing X y Sizing Y en 100.
Experimente con otros valores que podrían tener sentido para los controles. Un cuadro de diálogo con un cuadro de texto de una línea podría tener el tipo de ajuste de tamaño establecido en Horizontal solo, por ejemplo.
Establecimiento de propiedades de diseño dinámico mediante programación
El procedimiento anterior es útil para especificar propiedades de diseño dinámico para un cuadro de diálogo en tiempo de diseño, pero si desea controlar el diseño dinámico en tiempo de ejecución, puede establecer las propiedades de diseño dinámico mediante programación.
Para establecer las propiedades de diseño dinámico mediante programación
Busque o cree un lugar en el código de implementación de la clase de diálogo donde desea especificar el diseño dinámico para el cuadro de diálogo. Por ejemplo, es posible que quiera agregar un método como
AdjustLayout
en el cuadro de diálogo y llamarlo desde lugares en los que es necesario cambiar el diseño. Puede llamarlo primero desde el constructor o después de realizar cambios en el cuadro de diálogo.Para el cuadro de diálogo, llame a GetDynamicLayout, un método de la
CWnd
clase .GetDynamicLayout
devuelve un puntero a unCMFCDynamicLayout
objeto .CMFCDynamicLayout* dynamicLayout = pDialog->GetDynamicLayout();
Para el primer control al que desea agregar un comportamiento dinámico, use los métodos estáticos de la clase de diseño dinámico para crear la estructura MoveSettings que codifica la forma en que se debe ajustar el control. Para ello, primero elija el método estático adecuado: CMFCDynamicLayout::MoveHorizontal, CMFCDynamicLayout::MoveVertical, CMFCDynamicLayout::MoveNone o CMFCDynamicLayout::MoveHorizontalAndVertical. Pase un porcentaje para los aspectos horizontales o verticales del movimiento. Estos métodos estáticos devuelven un objeto MoveSettings recién creado que puede usar para especificar el comportamiento de movimiento de un control.
Tenga en cuenta que 100 significa mover exactamente tanto como cambia el tamaño del cuadro de diálogo, lo que hace que el borde de un control permanezca una distancia fija desde el nuevo borde.
MoveSettings moveSettings = CMFCDynamicLayout::MoveHorizontal(100);
Haga lo mismo para el comportamiento de tamaño, que usa el tipo SizeSettings . Por ejemplo, para especificar que un control no cambia el tamaño cuando cambie el tamaño del cuadro de diálogo, use el código siguiente:
SizeSettings sizeSettings = CMFCDynamicLayout::SizeNone();
Agregue el control al administrador de diseño dinámico mediante el método CMFCDynamicLayout::AddItem . Hay dos sobrecargas para diferentes formas de especificar el control deseado. Uno toma el identificador de ventana del control (HWND) y el otro toma el identificador de control.
dynamicLayout->AddItem(hWndControl, moveSettings, sizeSettings);
Repita la repetición para cada control que se debe mover o cambiar de tamaño.
Si es necesario, puede usar el método CMFCDynamicLayout::HasItem para determinar si un control ya está en la lista de controles sujetos a cambios de diseño dinámico o el método CMFCDynamicLayout::IsEmpty para determinar si hay controles sujetos a cambios.
Para habilitar el diseño del cuadro de diálogo, llame al método CWnd::EnableDynamicLayout .
pDialog->EnableDynamicLayout(TRUE);
La próxima vez que el usuario cambie el tamaño del cuadro de diálogo, se llama al método CMFCDynamicLayout::Adjust , que realmente aplica la configuración.
Si desea deshabilitar el diseño dinámico, llame a CWnd::EnableDynamicLayout con FALSE como para el parámetro bEnabled .
pDialog->EnableDynamicLayout(FALSE);
Para establecer el diseño dinámico mediante programación desde un archivo de recursos
Use el método CMFCDynamicLayout::MoveHorizontalAndVertical para especificar un nombre de recurso en el archivo de script de recursos pertinente (archivo.rc) que especifica información de diseño dinámico, como en el ejemplo siguiente:
dynamicLayout->LoadResource("IDD_DIALOG1");
El recurso con nombre debe hacer referencia a un cuadro de diálogo que contenga información de diseño en forma de una entrada de AFX_DIALOG_LAYOUT en el archivo de recursos, como en el ejemplo siguiente:
///////////////////////////////////////////////////////////////////////////// // // AFX_DIALOG_LAYOUT // IDD_MFCAPPLICATION1_DIALOG AFX_DIALOG_LAYOUT BEGIN 0x0000, 0x6400, 0x0028, 0x643c, 0x0028 END IDD_DIALOG1 AFX_DIALOG_LAYOUT BEGIN 0x0000, 0x6464, 0x0000, 0x6464, 0x0000, 0x0000, 0x6464, 0x0000, 0x0000 END
Consulte también
CMFCDynamicLayout (clase)
Clases de control
Clases de cuadro de diálogo
Editor de cuadros de diálogo
Diseño de diálogo dinámico para MFC en Visual C++ 2015