MFC Right Aline Controls en un Cdialogbar
-
28-10-2019 - |
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
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.