c++ - texto - como modificar un label en visual basic
Cambiar el tamaño de los controles en MFC (6)
Estoy escribiendo un programa que tiene dos paneles (a través de CSplitter
), sin embargo, tengo problemas para calcular el tamaño de los controles en cada cuadro. Para simplificar, ¿alguien me puede decir cómo lo haría para un cuadro básico con un solo control CEdit
?
Estoy bastante seguro de que tiene que ver con la función CEdit::OnSize()
... Pero realmente no estoy llegando a ningún lado ...
¡Gracias! :)
Cuando su marco recibe un mensaje OnSize le dará el nuevo ancho y alto - simplemente puede llamar al método CEdit SetWindowPos pasando estos valores.
Asuma que CMyPane es su panel divisor y contiene un CEdit que creó en OnCreate llamado m_wndEdit:
void CMyPane::OnSize(UINT nType, int cx, int cy)
{
m_wndEdit.SetWindowPos(NULL, 0, 0, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
}
GetDlgItem (IDC_your_slidebar) -> SetWindowPos (...) // en realidad puedes mover, cambiar el tamaño ... etc.
Otros han señalado que WM_SIZE es el mensaje que debe manejar y cambiar el tamaño de los controles secundarios en ese punto. WM_SIZE se envía después de que el cambio de tamaño ha finalizado.
También es posible que desee manejar el mensaje WM_SIZING que se envía mientras el cambio de tamaño está en progreso. Esto le permitirá redimensionar activamente las ventanas secundarias mientras el usuario todavía está arrastrando el mouse. No es estrictamente necesario manejar WM_SIZING pero puede proporcionar una mejor experiencia de usuario.
SetWindowPos es un poco pesado para este propósito. MoveWindow tiene justo lo que se necesita.
Utilizo la clase CResize de CodeGuru para cambiar el tamaño de todos los controles automáticamente. Usted dice cómo quiere que se cambie el tamaño de cada control y lo hace por usted.
El paradigma de cambio de tamaño es especificar cuánto se moverá cada lado de un control cuando se cambie el tamaño del diálogo.
SetResize(IDC_EDIT1, 0, 0, 0.5, 1);
SetResize(IDC_EDIT2, 0.5, 0, 1, 1);
Muy útil cuando tienes una gran cantidad de controles de diálogo.
Una ventana recibe el mensaje WM_SIZE (que se procesa mediante el controlador OnSize en MFC) inmediatamente después de cambiar su tamaño, por lo que CEdit :: OnSize no es lo que está buscando.
Debe agregar el controlador OnSize en su clase de marco y dentro de este manejador, como señaló Rob, obtendrá ancho y alto del área del cliente de su marco, luego debe agregar el código que ajusta el tamaño y la posición de su control.
Algo como esto
void MyFrame::OnSize(UINT nType, int w, int h)
{
// w and h parameters are new width and height of your frame
// suppose you have member veriable CEdit myEdit which you need to resize/more
myEdit.MoveWindow(w/5, h/5, w/2, h/2);
}