Pregunta

Estoy buscando una clase de cambio de tamaño de diálogo realmente buena que extienda y reduzca los elementos individuales según sea necesario a medida que se redimensiona la pantalla. Stephan Keil tiene una buena (DlgResizeHelper) que básicamente cambia el tamaño de todo en una proporción establecida, pero estoy buscando algo más inteligente.

Por ejemplo:

  • Los iconos no deben cambiar de tamaño

  • Los cuadros de texto de una sola línea no deben estirarse verticalmente

  • Los botones probablemente deben permanecer del mismo tamaño

Básicamente, estoy buscando algo para ver todos los controles, descubrir que un campo de texto estático está relacionado con un control que se encuentra a continuación / debajo y anclar los dos juntos, y cambiar el tamaño de los controles grandes de una manera "inteligente" para que se vea bien.

¿Hay tales marcos por ahí? He estado trabajando en uno, pero algo ya preparado probablemente sería mejor.

SEGUIMIENTO: Estoy mirando las soluciones sugeridas. Muchos de ellos requieren que se coloque un ancla en cada control del diálogo. Estoy buscando algo inteligente que averigüe lo que deberían ser los anclajes, con la capacidad de anclarlos manualmente si las suposiciones son erróneas. Parece que debería ser posible: la mayoría de los humanos estarían de acuerdo en que un campo de texto estático junto a un campo de edición debería estar anclado. Supongo que casi estoy buscando un poco de inteligencia artificial aquí :)

¿Fue útil?

Solución

Puedes usar wxWidgets. Reemplaza completamente a MFC, es multiplataforma y le brinda un mecanismo de diálogo basado en diseño.

Otros consejos

Yo uso ResizableLib (también hace PropertySheets y Pages) fuera de proyecto de código, IIRC. Establece puntos de anclaje que determinan cómo el diálogo y los controles cambian de tamaño o se mueven a medida que el diálogo se mueve.

Puede configurar hasta 2 anclas por control, (izquierda, derecha) para que pueda moverlas a medida que se mueve el diálogo, o cambiar su tamaño a medida que se mueve. Es muy fácil de entender, si es difícil de entender perfectamente :)

Probé muchos y finalmente me decidí por http: //www.codeproject. es / KB / dialog / layoutmgr.aspx . Sin embargo, no hace el diseño 'inteligente' que sugieres. Nunca he visto eso en ninguna biblioteca, en ninguna plataforma. No veo cómo funcionaría sin tener mucha magia bajo el capó que tendría que ser anulada la mitad del tiempo de todos modos.

La biblioteca MFC de Ultimate Toolbox ( aquí en CodeProject) incluye un < a href = "http://www.codeproject.com/KB/MFC/UltimateToolbox_Layout.aspx" rel = "nofollow noreferrer"> layout manager . No lo he usado, pero parece que hace lo que quieres.

Puede consultar GUI profesional y usaremos su biblioteca de clases para cambiar el tamaño de nuestros controles de diálogo. Creo que eso es parte de su versión gratuita.

Usamos la clase CResize de CodeGuru para cambiar el tamaño de todos los controles automáticamente. Usted dice cómo desea que se redimensione cada control y hace el trabajo por usted.

El paradigma de cambio de tamaño es especificar cuánto se moverá cada lado de un control cuando se cambie el tamaño del diálogo.

SetResize(IDC_EDIT1, 0,   0,   0.5, 1);
SetResize(IDC_EDIT2, 0.5, 0,   1,   1);

Muy útil cuando tienes una gran cantidad de controles de diálogo.

Código fuente

Esta es una solución gratuita también de CodeProject
http://www.codeproject.com/KB/dialog/dlgresizearticle.aspx
Es solo un conjunto de macros simples que posicionan los controles a medida que el diálogo cambia de tamaño.

Editar - siguiendo los comentarios de los OPs. No conozco ningún tipo de compatibilidad con el medidor general como QT / WX para MFC, tampoco parece estar presente en nuevos marcos como Winforms.
Está en QT / WX porque es necesario para multiplataforma donde los widgets pueden tener un tamaño diferente, lo que explica la falta de MS. Pero también es vital para los puertos multi-idioma, por ejemplo. donde el alemán para cancelar tiene 30 caracteres de longitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top