Condividi tramite


Layout dinamico

Con MFC in Visual Studio 2015, è possibile creare finestre di dialogo che l'utente può ridimensionare ed è possibile controllare il modo in cui il layout viene modificato in base alle dimensioni. È ad esempio possibile collegare i pulsanti nella parte inferiore di una finestra di dialogo al bordo inferiore in modo che mantengano sempre tale posizione. È anche possibile configurare determinati controlli, come caselle di riepilogo, caselle di modifica e campi di testo in modo che si espandano quando l'utente espande la finestra di dialogo.

Specifica delle impostazioni per il layout dinamico per una finestra di dialogo MFC

Quando l'utente ridimensiona una finestra di dialogo, i controlli di tale finestra possono essere ridimensionati o spostati nelle direzioni X e Y. La modifica delle dimensioni o della posizione di un controllo in seguito al ridimensionamento di una finestra di dialogo da parte dell'utente viene definita layout dinamico. La seguente è ad esempio una finestra di dialogo prima che venga ridimensionata:

Dialog before being resized.

Dopo il ridimensionamento l'area della casella di riepilogo viene ampliata in modo da visualizzare più elementi e i pulsanti vengono spostati unitamente all'angolo inferiore destro:

Dialog after being resized.

È possibile controllare il layout dinamico specificando i dettagli per ogni controllo nell'editor di risorse nell'IDE oppure a livello di codice accedendo all'oggetto CMFCDynamicLayout per un determinato controllo e impostando le proprietà.

Impostazione delle proprietà del layout dinamico nell'Editor risorse

È possibile usare l'Editor risorse per impostare il comportamento del layout dinamico per una finestra di dialogo senza dover scrivere codice.

Per impostare le proprietà del layout dinamico nell'Editor risorse

  1. Dopo aver aperto un progetto MFC aprire la finestra di dialogo con cui lavorare nell'editor della finestra di dialogo.

    Open the dialog in the resource editor.

  2. Selezionare un controllo e nella finestra Proprietà (in Visualizzazione classi) impostare le relative proprietà di layout dinamico. La sezione Layout dinamico nella finestra Proprietà contiene le proprietà Spostamento tipo, Tipo di ridimensionamento e, a seconda dei valori selezionati per tali proprietà, proprietà specifiche che definiscono la quantità di controlli che spostano o modificano le dimensioni. Lo spostamento del tipo determina la modalità di spostamento di un controllo durante la modifica delle dimensioni del dialogo; Il tipo di ridimensionamento determina il modo in cui un controllo viene ridimensionato man mano che viene modificata la dimensione del dialogo. Lo spostamento del tipo e il tipo di ridimensionamento possono essere Orizzontale, Verticale, Entrambi o Nessuno a seconda delle dimensioni che si desidera modificare in modo dinamico. Il termine Orizzontale si riferisce alla dimensione X, mentre Verticale corrisponde alla direzione Y.

  3. Se si desidera che un controllo, ad esempio un pulsante, sia a dimensione fissa e rimanga in posizione in basso a destra, come avviene comunemente per i pulsanti OK o Annulla , impostare Il tipo di ridimensionamento su Nessuno e impostare Il tipo di spostamento su Entrambi. Per i valori Spostamento X e Y in Tipo mobile, impostare il 100% per fare in modo che il controllo rimanga una distanza fissa dall'angolo inferiore destro.

    Dynamic Layout.

  4. Si supponga che sia presente anche un altro controllo da espandere all'espansione della finestra di dialogo. In genere, un utente espande una finestra di dialogo per espandere una casella di modifica multiriga e aumentare le dimensioni dell'area di testo oppure espande un controllo elenco per visualizzare ulteriori dati. In questo caso, impostare Il tipo di ridimensionamento su Entrambi e impostare Il tipo di spostamento su nessuno. Impostare quindi i valori Sizing X e Sizing Y su 100.

    Dynamic Layout Settings.

  5. Sperimentare altri valori che potrebbero risultare efficaci per i controlli usati. Una finestra di dialogo con una casella di testo una riga potrebbe avere il tipo di ridimensionamento impostato solo su Orizzontale , ad esempio.

Impostazione delle proprietà del layout dinamico a livello di codice

La procedura precedente è utile per specificare le proprietà del layout dinamico per una finestra di dialogo in fase di progettazione, ma se si intende controllare il layout dinamico in fase di esecuzione, è possibile impostare tali proprietà a livello di codice.

Per impostare le proprietà del layout dinamico a livello di codice

  1. Nel codice di implementazione della classe della finestra individuare o creare un punto in cui specificare il layout dinamico per la finestra di dialogo. Ad esempio, si può aggiungere un metodo come AdjustLayout nella finestra di dialogo e chiamarlo da punti in cui è necessario modificare il layout. Il metodo può innanzitutto essere chiamato dal costruttore o dopo aver apportato modifiche alla finestra di dialogo.

  2. Per la finestra di dialogo, chiamare GetDynamicLayout, un metodo della CWnd classe . GetDynamicLayout restituisce un puntatore a un oggetto CMFCDynamicLayout .

    CMFCDynamicLayout* dynamicLayout = pDialog->GetDynamicLayout();
    
  3. Per il primo controllo a cui si desidera aggiungere un comportamento dinamico, utilizzare i metodi statici nella classe di layout dinamico per creare la struttura Move Impostazioni che codifica la modalità di regolazione del controllo. A tale scopo, scegliere prima di tutto il metodo statico appropriato: CMFCDynamicLayout::MoveHorizontal, CMFCDynamicLayout::MoveVertical, CMFCDynamicLayout::MoveNone o CMFCDynamicLayout::MoveHorizontalAndVertical. Passare una percentuale per gli aspetti orizzontale e/o verticale dello spostamento. Questi metodi statici restituiscono tutti un oggetto MoveSettings appena creato che è possibile usare per specificare il comportamento di spostamento di un controllo.

    Tenere presente che con il valore 100 l'entità dello spostamento sarà identico a quello del ridimensionamento della finestra di dialogo, di conseguenza il bordo di un controllo rimarrà a una distanza fissa dal nuovo bordo.

    MoveSettings moveSettings = CMFCDynamicLayout::MoveHorizontal(100);
    
  4. Eseguire la stessa operazione per il comportamento delle dimensioni, che usa il tipo Size Impostazioni. Ad esempio, per specificare che le dimensioni di un controllo non cambiano quando si ridimensiona la finestra di dialogo, usare il codice seguente:

    SizeSettings sizeSettings = CMFCDynamicLayout::SizeNone();
    
  5. Aggiungere il controllo alla gestione layout dinamico usando il metodo CMFCDynamicLayout::AddItem . Esistono due overload utili per specificare il controllo desiderato. Uno accetta l'handle della finestra (HWND) del controllo, mentre l'altro accetta l'ID del controllo.

    dynamicLayout->AddItem(hWndControl,
    moveSettings,
    sizeSettings);
    
  6. Ripetere l'operazione per ogni controllo da spostare o ridimensionare.

  7. Se necessario, può utilizzare il metodo CMFCDynamicLayout::HasItem per determinare se un controllo è già presente nell'elenco dei controlli soggetti a modifiche di layout dinamico o il metodo CMFCDynamicLayout::IsEmpty per determinare se sono presenti controlli soggetti a modifiche.

  8. Per abilitare il layout della finestra di dialogo, chiamare il metodo CWnd::EnableDynamicLayout .

    pDialog->EnableDynamicLayout(TRUE);
    
  9. Al successivo ridimensionamento della finestra di dialogo, viene chiamato il metodo CMFCDynamicLayout::Adjust che applica effettivamente le impostazioni.

  10. Per disabilitare il layout dinamico, chiamare CWnd::EnableDynamicLayout con FAL edizione Standard come per il parametro bEnabled.

    pDialog->EnableDynamicLayout(FALSE);
    

Per impostare il layout dinamico a livello di codice da un file di risorse

  1. Usare il metodo CMFCDynamicLayout::MoveHorizontalAndVertical per specificare un nome di risorsa nel file di script di risorse pertinente (file RC) che specifica informazioni sul layout dinamico, come nell'esempio seguente:

    dynamicLayout->LoadResource("IDD_DIALOG1");
    

    La risorsa denominata deve fare riferimento a una finestra di dialogo contenente informazioni sul layout sotto forma di voce AFX_DIALOG_LAYOUT nel file di risorse, come nell'esempio seguente:

    /////////////////////////////////////////////////////////////////////////////
    //
    // 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
    

Vedi anche

Classe CMFCDynamicLayout
Classi di controlli
Classi di finestre di dialogo
Editor finestre
Layout finestra di dialogo dinamica per MFC in Visual C++ 2015