Domanda

Attualmente sto progettando la mia prima GUI per Windows. Sto usando MFC e Visual Studio 2008. Il monitor su cui ho progettato il mio programma ha una risoluzione nativa di 1680x1050. Se compilo e invio il mio programma a uno dei miei colleghi per l'esecuzione sul loro computer (in genere un laptop in esecuzione a 1024x768), il mio programma non si adatterà al loro schermo.

Ho provato a leggere come progettare un'applicazione MFC in modo che possa funzionare su tutte le risoluzioni, ma continuo a trovare informazioni fuorvianti. Ovunque guardi sembra che le DLU debbano ridimensionare l'applicazione per te e che l'unica volta in cui dovresti riscontrare problemi è quando hai una bitmap reale di cui devi preoccuparti della risoluzione. Ma in questo caso, perché il mio programma non si adatta più allo schermo quando imposto il monitor su una risoluzione inferiore? Invece del mio programma & Quot; restringimento & Quot; per occupare la stessa quantità di spazio sullo schermo che utilizza a 1680x1050, diventa enorme e granuloso.

Il " ovvio " la soluzione qui è impostare la mia risoluzione su 1024x768 e riprogettare il mio programma per adattarlo allo schermo. Tranne il fatto che ho già schiacciato il più possibile ogni cosa nei miei dialoghi per provare a far sì che il mio programma si adattasse allo schermo in esecuzione a 1024x768. I caratteri della mia finestra di dialogo sono impostati su Microsoft Sans Serif 8 ma appaiono comunque enormi (molto più grandi di 8 punti) quando sono in esecuzione a 1024x768.

So che deve esserci un modo per fare in modo che il mio programma mantenga lo stesso ridimensionamento ... giusto? O è questo il modo sbagliato di affrontare il problema? Qual è il modo corretto / standard per progettare un programma MFC in modo che possa essere eseguito su molte risoluzioni, diciamo 800x600 e oltre?

È stato utile?

Soluzione

Suppongo che la GUI dell'applicazione sia basata su una finestra di dialogo (la finestra principale è una finestra di dialogo)?

In quel caso hai un problema, perché, come hai scoperto, MFC non ha supporto per ridimensionare correttamente una finestra di dialogo. Le tue opzioni sono:

  • Riprogetta la tua GUI per usare una GUI SDI o MDI.
  • Utilizza una finestra di dialogo per ridimensionare l'estensione. Ce ne sono molti disponibili, per alcuni ottimi suggerimenti vedi questa domanda . Altre opzioni sono questo e questo .
  • Non usare MFC. wxWidgets ha un supporto molto migliore per il ridimensionamento delle finestre di dialogo.

Altri suggerimenti

MFC è solo un wrapper sottile sull'API di Windows. Entrambi fanno un presupposto che non è quasi mai vero: se si dispone di uno schermo con una risoluzione più elevata, si regola il DPI o la dimensione del carattere in Windows per ottenere caratteri più grandi. Il più delle volte, una dimensione dello schermo più grande significa un monitor fisico più grande o un laptop in cui si desidera spremere quante più informazioni possibile su un piccolo schermo; le persone apprezzano più informazioni su maggiori dettagli. Quindi il presupposto fallisce.

Se non riesci a comprimere l'intera UI nello schermo di dimensioni più piccole che devi supportare, dovrai trovare un altro modo per ridurlo. Senza sapere nulla sulla tua interfaccia utente, potrei suggerire di utilizzare le schede per raggruppare i controlli in pagine.

Ho avuto la fortuna di rendere ridimensionabili le mie finestre, in modo che le persone con schermi più grandi possano vedere più informazioni contemporaneamente. Devi farlo nel modo più duro, rispondendo al messaggio WM_SIZE alla finestra e decidendo quali controlli dovrebbero essere ingranditi e quali dovrebbero essere spostati.

Non esiste un modo automatico per ridimensionare il contenuto delle finestre di dialogo quando la risoluzione cambia. Quindi, è necessario impostare alcuni limiti.

Opzione 1. Se stai sviluppando la tua app per i clienti, scegli una risoluzione minima (come 1024x7678), ridisegna le finestre di dialogo in modo che tutto si adatti. Forse suddividine alcuni in diversi, oppure usa il controllo tab strip.

Opzione 2. Crea moduli di dialogo separati per ogni risoluzione che desideri supportare, ma usa la stessa classe per gestirla. In fase di esecuzione, rilevare la risoluzione e utilizzare il modulo appropriato.

Opzione 3. Scrivi la tua funzionalità di ridimensionamento, in modo che l'utente possa adattare le dimensioni dei tuoi dialoghi a suo piacimento.

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