Pregunta

Tengo una clase derivada de Cdialogbar establecida como a continuación. Un colega me dijo que MFC no ofrece control de diseño de flujo aligment (¡que encuentro algo increíble en el año 2012!). Tuve que hacer lo que se usa como muestro:

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

Incluso después de ver esto funcionando, no confío mucho en eso. Entonces mi pregunta es: ¿hay una mejor manera de controlar los controles correctos?

Gracias por adelantado,

Sérgio

¿Fue útil?

Solución

Incluso en el año 2013, su colega tiene razón: no hay un diseño automático de controles con MFC.

Según CodeProject "Layout Manager para cuadros de diálogo, Formviews, cuadros de diálogo y Propiedades":

"Si a menudo usa diálogos y desea cambiar el tamaño, habrá notado que no hay una característica en MFC que lo ayude a organizar los controles de diálogo automáticamente después del cambio de tamaño. Debe hacerlo a mano".

Para diálogos simples, creo que su solución está bien, y Onsize () es el lugar correcto para hacer el diseño a mano. De lo contrario, tendrá que mirar clases de diseño adicionales como una mencionada anteriormente o "Diseño automático de diálogos reestisables"Lo cual es unos años más joven.

EDITAR:
Según el comentario de Sergiols, Microsoft desarrolló Diseño dinámico para Visual Studio 2015 introducido en este Entrada en el blog que parece manejar el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top