Como redimensionar tabControl?

Moderador: ivancp

Preguntas y respuestas sobre programacion en Windows con Visual C++

Como redimensionar tabControl?

Notapor a343 » Jue Sep 29, 2011 4:45 am

Hola,

Necesito saber como redimensionar un tabControl de tal manera que ocupe todo el marco de trabajo. El tab control esta integrado en la vista como CFormView. Dentro del tabcontrol hay un Edit control, y me gustaria que este se redimensionara de la misma manera.

Gracias
a343
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 93
Registrado: Lun Mar 07, 2011 7:35 am


Re: Como redimensionar tabControl?

Notapor ivancp » Lun Oct 03, 2011 9:30 am

En tu Formulario agrega el evento OnSize y:

Suponiendo que el ID de tu control es IDC_TAB1:
Código: Seleccionar todo
  1. void CEliminameView::OnSize(UINT nType, int cx, int cy)

  2. {

  3.         CFormView::OnSize(nType, cx, cy);

  4.         if (GetDlgItem(IDC_TAB1))

  5.         {

  6.           GetDlgItem(IDC_TAB1)->MoveWindow(5,5,cx-5,cy-5);  //puedes jugar con estos valores

  7.         }

  8.         // TODO: Agregue aquí su código de controlador de mensajes

  9. }



Suponiendo que tu control esta asociado a una clase

Código: Seleccionar todo
  1. void CEliminameView::OnSize(UINT nType, int cx, int cy)

  2. {

  3.         CFormView::OnSize(nType, cx, cy);

  4.         if (m_tuvariableTab.m_hWnd)

  5.         {

  6.                 m_tuvariableTa.MoveWindow(5,5,cx-5,cy-5); //puedes jugar con estos valores

  7.         }

  8.         // TODO: Agregue aquí su código de controlador de mensajes

  9. }



Me cuentas como te fue...
Imagen @latindev | Mi Blog
Por favor lee las reglas del foro
Avatar de Usuario
ivancp
Colaborador
Colaborador
 
Mensajes: 680
Registrado: Jue Sep 06, 2007 12:58 pm


Re: Como redimensionar tabControl?

Notapor a343 » Mar Oct 04, 2011 5:59 am

Hola, finalmente deseche la idea de un tabControl.

Necesito maximizar un edt control. Muestro la ventana maximizada con dlgDesc->ShowWindow(SW_MAXIMIZE); pero no se maximiza el edit control, como puedo hacerlo?
a343
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 93
Registrado: Lun Mar 07, 2011 7:35 am

Re: Como redimensionar tabControl?

Notapor ivancp » Mar Oct 04, 2011 8:12 am

PodrÍas decirnos en unas cuantas palabras... que es lo necesitas lograr? por que tengo una vaga idea de lo que quieres mostrar/visualizar/ingresar/diseñar/etc
Imagen @latindev | Mi Blog
Por favor lee las reglas del foro
Avatar de Usuario
ivancp
Colaborador
Colaborador
 
Mensajes: 680
Registrado: Jue Sep 06, 2007 12:58 pm

Re: Como redimensionar tabControl?

Notapor a343 » Mar Oct 04, 2011 10:24 am

es un dialogo no modal que contiene un edit control, y mostrara una serie de texto al pulsar una serie de botones.
Todo eso esta hecho ya, pero al mostrarlo, la ventana se meustra maximizada por ShowWindow(SW_MAXIMIZE); pero el edit control no.
Estoy intentando redimensionarla con el mensaje WM_SIZE

void CEjemplo::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
OnSizeToClient();
// TODO: Agregue aquí su código de controlador de mensajes
}

void CEjemplo::OnSizeToClient()
{
CRect myRect;
GetClientRect(&myRect);

ClientToScreen(myRect);
MoveWindow(myRect.left, myRect.top,
myRect.Width(), myRect.Height());
}

Pero esto no me lo hace bien, no se exactamente que hace la funcion getclient pero creo que no es lo que yo quiero que haga.
Tan solo me hace falta algo que haga que el edit control tambien se maximize junto con la ventana.

Gracias
a343
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 93
Registrado: Lun Mar 07, 2011 7:35 am

Re: Como redimensionar tabControl?

Notapor ivancp » Mar Oct 04, 2011 10:30 am

El código no se parece mucho a lo que yo escribí:

Código: Seleccionar todo
  1. void CEliminameView::OnSize(UINT nType, int cx, int cy)

  2. {

  3.         CFormView::OnSize(nType, cx, cy);

  4.         if (GetDlgItem(IDC_EDIT1))

  5.         {

  6.           GetDlgItem(IDC_EDIT1)->MoveWindow(5,5,cx-5,cy-5);  //puedes jugar con estos valores

  7.         }

  8. }



IDC_EDIT1 es el ID de tu control Edit.

Lo que estas intentando con tu código es mover la ventana actual
Imagen @latindev | Mi Blog
Por favor lee las reglas del foro
Avatar de Usuario
ivancp
Colaborador
Colaborador
 
Mensajes: 680
Registrado: Jue Sep 06, 2007 12:58 pm

Re: Como redimensionar tabControl?

Notapor a343 » Mar Oct 04, 2011 11:15 am

Perfecto, con esos valores bastó.
Si añado un boton, al formulario, ¿como hago para que este se recoloque abajo del todo c uando se maximize?
¿de la misma manera?

Probe haciendo:
if (GetDlgItem(IDC_EDIT1))

{

GetDlgItem(IDC_EDIT1)->MoveWindow(5,5,cx-5,cy-5); //puedes jugar con estos valores
GetDlgItem(IDC_Botton1)->MoveWindow(5,5,cx-5,cy-5); //puedes jugar con estos valores
GetDlgItem(IDC_botton2)->MoveWindow(5,5,cx-5,cy-5); //puedes jugar con estos valores
}

Pero no me funciono.

Muchas gracias.
a343
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 93
Registrado: Lun Mar 07, 2011 7:35 am

Re: Como redimensionar tabControl?

Notapor ivancp » Mar Oct 04, 2011 8:14 pm

La función MoveWindow tiene 4 parámetros:

Los dos primeros son las coordenadas x,y empezando de la esquina superior izquierda.
Los dos últimos son el ancho y el alto respectivamente.

De acuerdo a esos parametros debes "ubicar" cada control.

Segun lo que puedo ver, el control IDC_EDIT1 debe ser "menos alto", (cy-50), luego el control IDC_BOTON1 debe tener por lomenos 30 de alto y estar ubicado al final... es cuestión que hagas los calculos matemáticos en función a las variables cx y cy (que son el ancho y alto respectivamente)

Nos cuentas como te fue
Imagen @latindev | Mi Blog
Por favor lee las reglas del foro
Avatar de Usuario
ivancp
Colaborador
Colaborador
 
Mensajes: 680
Registrado: Jue Sep 06, 2007 12:58 pm

Re: Como redimensionar tabControl?

Notapor a343 » Mié Oct 05, 2011 2:35 am

Bueno al final lo hice con setwinndowsPos y con unos valores estaticos porque no encontre otra forma..

m_Button1.SetWindowPos(&CWnd::wndBottom,1250,680,cx-50,cy-75,SWP_NOSIZE);
a343
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 93
Registrado: Lun Mar 07, 2011 7:35 am

Re: Como redimensionar tabControl?

Notapor ivancp » Mié Oct 05, 2011 9:50 am

Dudo mucho que el boton se mueva dinamicamente mientras se redimensiona la ventana.

Te he dado pistas para este codigo:

Código: Seleccionar todo
  1. void CTuFormView::OnSize(UINT nType, int cx, int cy)

  2. {

  3.         CFormView::OnSize(nType, cx, cy);

  4.         if (GetDlgItem(IDC_EDIT1))

  5.         {

  6.                 CWnd* edit = GetDlgItem(IDC_EDIT1);

  7.                 CWnd* btn1 = GetDlgItem(IDC_BUTTON1);

  8.                 CWnd* btn2 = GetDlgItem(IDC_BUTTON2);

  9.  

  10.                 CRect r1;

  11.                 CRect r2;

  12.                 int m = 5; //margen entre controles

  13.                 btn1->GetClientRect(&r1);

  14.                 btn2->GetClientRect(&r2);

  15.  

  16.                 edit->MoveWindow(m, m, cx-m

  17.                                   ,cy - (3*m + r1.Height()) );

  18.                 btn1->MoveWindow(m, cy - (r1.Height() + m)

  19.                                   ,r1.Width(),r1.Height());

  20.  

  21.                 btn2->MoveWindow(m + r1.Width() + 2*m

  22.                                   ,cy - (r2.Height() + m)

  23.                                   ,r2.Width(), r2.Height());

  24.         }

  25. }



Lo explico:
  • Linea 6-8 obtengo los apuntadores a los controles (por que los voy a usar mas de una vez)
  • Linea 13-14 obtengo las dimensiones de cada boton y los guardo en las variables Rect
  • Linea 16, muevo el edit empezando en la posicion 5,5 (izquierda-arriba) la altura es todo lo que hay disponible menos la altura de los botones (linea 17)
  • Linea 18, mover boton1 a la posicion x=5 (margen) e y= [alto del formulario] - [alto del boton + margen]
  • Linea 21, mover boton2 a la posicion x=[margen] + [ancho del boton 1] + [margen]

Es todo... y tiene mucho sentido... he tratado de decirte que hagas esos calculos, es cuestion que los dibujes con un lapiz y papel, recuerda que no estas trabajando con un lenguaje "visual" como C#, casi todo lo tienes que hacer desde el código fuente, tienes que tener las cosas claras.

autozise.PNG
Referencia del autodimensionado y autoacomodado de controles en un formulario


Nos cuentas como te fue.
Imagen @latindev | Mi Blog
Por favor lee las reglas del foro
Avatar de Usuario
ivancp
Colaborador
Colaborador
 
Mensajes: 680
Registrado: Jue Sep 06, 2007 12:58 pm

Re: Como redimensionar tabControl?

Notapor a343 » Lun Oct 10, 2011 3:51 am

Muchas gracias ivan, a mi me va perfecto, lo probare en otro ordenador para ver si funciona igual y no se descuadra el bton
a343
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 93
Registrado: Lun Mar 07, 2011 7:35 am


    

Volver a Visual C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados