Question

J'ai une classe dérivée de CDialogBar indiquée ci-dessous.Un collègue m'a dit que MFC n'offrait pas de contrôle de disposition de flux d'alignement (ce que je trouve incroyable en 2012!).J'ai dû faire la chose avec la fonction OnSize comme je le montre:

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

Même après avoir vu cela fonctionner, je ne lui fais pas vraiment confiance.Ma question est donc la suivante: existe-t-il un meilleur moyen d'aligner les commandes à droite?

Merci d'avance,

Sérgio

Était-ce utile?

La solution

Même en 2013, votre collègue a raison: il n'y a pas de disposition automatique des commandes avec MFC.

Selon CodeProject " Layout Manager for Dialogs , Formviews, DialogBars et PropertyPages ":

"Si vous utilisez souvent des boîtes de dialogue et que vous souhaitez les redimensionner, vous aurez remarqué qu'il n'y a pas de fonctionnalité dans MFC qui vous aide à organiser les contrôles de boîte de dialogue automatiquement après le redimensionnement. Vous devez le faire à la main."

Pour les dialogues simples, je pense que votre solution est très bien, et OnSize () est le bon endroit pour faire la mise en page à la main. Sinon, vous devrez regarder des classes de mise en page supplémentaires comme celle référencée ci-dessus ou " Disposition automatique des boîtes de dialogue redimensionnables ", qui a quelques années de moins.

MODIFIER:
Selon le commentaire de sergiols, Microsoft a développé Dynamic Layout pour Visual Studio 2015 présenté dans cet article de blog qui semble gérer le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top