Clase de cambio de tamaño de diálogo de Windows C ++

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 icons no deben cambiar de tamaño

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

  • Los botones probablemente deberían 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 forma “inteligente” para que se vea bueno.

¿Hay tales marcos por ahí? He estado trabajando en uno, pero algo ya hecho 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 cuáles 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í 🙂

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

Yo uso ResizableLib (también hace PropertySheets y Pages) del 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 anclajes por control, (izquierda, derecha) para que pueda moverlos 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 🙂

He probado muchos y finalmente me decidí por http://www.codeproject.com/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 de Ultimate Toolbox MFC ( aquí en CodeProject) incluye un administrador de diseño . Yo no lo he usado, pero parece que hace lo que quieres.

Puede consultar la GUI profesional que usamos en 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 un gran número 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 la posición controla 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 es de 30 caracteres de largo.