Domanda

Ho una classe derivata Cdialogbar indicata come di seguito. Un collega mi ha detto che MFC non offre il controllo del layout del flusso di aligmento (che trovo qualcosa di incredibile nel 2012!). Ho dovuto fare la cosa con la funzione onsize mentre mostro:

//declaration of member variable
class CMyDialogBar : public CDialogBar
{
private:
    int m_old_cx;
    //...    
}


//the message map
BEGIN_MESSAGE_MAP(CMyDialogBar, CDialogBar)
    //...
    ON_WM_SIZE()
END_MESSAGE_MAP()    

//the implementation
void CMyDialogBar::OnSize(UINT nType, int cx, int cy)
{
    CDialogBar::OnSize(nType, cx, cy);

    if (!::IsWindow(this->GetSafeHwnd()))
        return;

    // align right Combo1 and its label
    CRect rc;
    CWnd *pWnd= this->GetDlgItem(IDC_COMBO1);
    if(pWnd)
    {
        pWnd->GetWindowRect(&rc);
        ScreenToClient(&rc);
        pWnd->MoveWindow(rc.left + cx - m_old_cx, rc.top ,rc.Width(), rc.Height());
    }

    pWnd= this->GetDlgItem(IDC_STATIC_COMBO_LABEL);
    if(pWnd)
    {
        pWnd->GetWindowRect(&rc);
        ScreenToClient(&rc);
        pWnd->MoveWindow(rc.left + cx - m_old_cx, rc.top ,rc.Width(), rc.Height());
    }


    m_old_cx= cx;
}

Anche dopo aver visto questo funzionare, non mi fido molto. Quindi la mia domanda è: esiste un modo migliore per i controlli di allineamento giusto?

Grazie in anticipo,

Sergio

È stato utile?

Soluzione

Anche nel 2013 il tuo collega ha ragione: non esiste un layout automatico di controlli in arrivo con MFC.

Secondo CodeProject "Layout Manager per finestre di dialogo, FormViews, Dialogbar e Property Pages":

"Se usi spesso le finestre di dialogo e desideri ridimensionarli, avrai notato che non esiste una funzione in MFC che ti aiuti a organizzare automaticamente i controlli delle finestre di dialogo dopo il ridimensionamento. Devi farlo a mano."

Per semplici dialoghi penso che la tua soluzione vada bene e, suSize () è il posto giusto per fare il layout a mano. Altrimenti dovrai esaminare ulteriori lezioni di layout come una referenziata sopra o "Layout automatico di dialoghi ridimensionabili"Che è qualche anno più giovane.

MODIFICARE:
Secondo il commento di Sergiaols, Microsoft ha sviluppato Layout dinamico Per Visual Studio 2015 introdotto in questo Post sul blog che sembra gestire il problema.

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