Domanda

Sto cercando una classe di ridimensionamento dialoghi davvero buona che allungherà e ridurrà i singoli elementi quando necessario mentre lo schermo viene ridimensionato. Stephan Keil ne ha una buona (DlgResizeHelper) che sostanzialmente ridimensiona tutto di un determinato rapporto, ma sto cercando qualcosa di più intelligente.

Ad esempio:

  • Le icone non devono ridimensionare

  • Le caselle di testo a riga singola non devono essere allungate verticalmente

  • I pulsanti dovrebbero probabilmente avere le stesse dimensioni

Fondamentalmente sto cercando qualcosa per guardare tutti i controlli, capire che un campo di testo statico è correlato a un controllo accanto / sotto di esso e ancorare i due insieme e ridimensionare i controlli di grandi dimensioni in modo "intelligente" quindi sembra buono.

Esistono tali framework là fuori? Ci sto lavorando ma qualcosa di già pronto sarebbe probabilmente migliore.

SEGUI SU: sto esaminando le soluzioni suggerite. Molti di essi richiedono di andare in un ancoraggio ogni controllo nella finestra di dialogo. Sto cercando qualcosa di intelligente che capirà quali dovrebbero essere le ancore, con la possibilità di ancorare manualmente se le ipotesi sono sbagliate. Sembra che dovrebbe essere possibile - la maggior parte degli umani concorderebbe che un campo di testo statico accanto a un campo di modifica dovrebbe essere ancorato insieme. Immagino che sto quasi cercando un po 'di intelligenza artificiale qui :)

È stato utile?

Soluzione

Puoi usare wxWidgets. Sostituisce completamente MFC, è multipiattaforma e offre un meccanismo di dialogo basato sul layout.

Altri suggerimenti

Uso ResizableLib (fa anche fogli di proprietà e pagine) off codeproject, IIRC. È possibile impostare punti di ancoraggio che determinano il modo in cui la finestra di dialogo e i controlli vengono ridimensionati o spostati durante lo spostamento della finestra di dialogo.

È possibile impostare fino a 2 ancore per controllo (sinistra, destra) in modo da poterle spostare durante lo spostamento della finestra di dialogo o ridimensionarle durante lo spostamento. È molto facile da capire, se difficile da ottenere perfettamente giusto :)

Ne ho provati molti e alla fine ho optato per http: //www.codeproject. com / KB / dialogo / layoutmgr.aspx . Non esegue il layout "intelligente" che suggerisci comunque. Non l'ho mai visto in nessuna biblioteca, su nessuna piattaforma - non vedo come funzionerebbe senza avere un sacco di magia nascosta che dovrebbe essere ignorata la metà delle volte.

La libreria MFC Ultimate Toolbox ( qui su CodeProject) include un < a href = "http://www.codeproject.com/KB/MFC/UltimateToolbox_Layout.aspx" rel = "nofollow noreferrer"> gestore layout . Non l'ho usato da solo, ma sembra che faccia quello che vuoi.

Puoi guardare GUI professionale che usiamo la loro libreria di classi per ridimensionare i controlli dei nostri dialoghi. Penso che faccia parte della loro versione gratuita.

Utilizziamo la classe CResize di CodeGuru per ridimensionare automaticamente tutti i controlli. Dici come vuoi che ogni controllo venga ridimensionato e fa il lavoro per te.

Il paradigma di ridimensionamento consiste nello specificare di quanto si sposterà ciascun lato di un controllo quando viene ridimensionato il dialogo.

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

Molto utile quando si dispone di un gran numero di controlli di dialogo.

Codice sorgente

Questa è una soluzione gratuita anche da CodeProject
http://www.codeproject.com/KB/dialog/dlgresizearticle.aspx
È solo un insieme di macro semplici che posizionano i controlli durante il ridimensionamento della finestra di dialogo.

Modifica - seguendo i commenti dei PO. Non conosco alcun supporto di sizer generale come QT / WX per MFC, non sembra nemmeno essere presente in nuovi framework come Winforms.
È in QT / WX perché è necessario per multipiattaforma in cui i widget possono avere dimensioni diverse, il che spiega la mancanza di MS. Ma è anche vitale per le porte multilingue, ad es. dove il tedesco per cancellazione è lungo 30 caratteri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top