Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


cambiar propiedades tiempo de ejecución

Aqui programadores en la plataforma Win32 con Visual C++ de Microsoft...

Moderador: latindeveloper

cambiar propiedades tiempo de ejecución

Notapor DavidArias el Mar Nov 08, 2005 5:57 pm

Buen día!

Muchisimas gracias x todas las respuestas que me han dado en los proyectos.

Ahora tengo unas nuevas ...

1. Necesito mediante código cambiar la ubicación de un control CStatic, es decir, en tiempo de diseño la pongo en cierta posición del Cuadro de Dialogo (CDialog), pero necesito moverla a otra ubicación cuando el control que está arriba de éste tiene más de una línea ... si no me hago entender, básicamente necesito mover hacia abajo un control CStatic cuando otro control CStatic lo esta tapando ...

2. Otra cosa que no he podido hacer es colocar un icono (como el de la mano, cuando se muestra un hyperlink en internet explorer) en un CStatic y que se muestre cuando muevo el mouse encima del mismo (me pueden indicar cómo lo hago??? )

3. Finalmente, me gustaría saber si hay alguna manera de implementar métodos que no estan disponibles en el class wizard para algunos controles, por ejemplo colocarle evento click (click sencillo , no doble click) a un control CListBox dentro de un cuadro de dialogo ...

MUCHISIMAS GRACIAS A QUIEN PUEDA RESPONDER MIS INQUIETUDES !!!!
DavidArias
Novato
Novato
 
Mensajes: 11
Registrado: Mié Oct 26, 2005 4:44 pm

RE: cambiar propiedades tiempo de ejecución

Notapor onlytk el Mar Nov 08, 2005 8:58 pm

Holas, komo dijo jack el destripador: Vayamos por partes :twisted:

1. Si kieres mover kualkier ventana, obviamente en windows todos los objetos son ventanas entonces debemos hacer lo siguiente, desde la MFC o la API utilizar MoveWindow, supongo ke hay otros metodos enviando mensaje a la ventana pero al final un buen programador no busca complicarse, tampoco querramos inventar la rueda. Bueno vayamos al tema, en tu Dialogo pon un control STATIC y dale una ID por ejemplo : IDC_STATICMOVIBLE, luego para probar pon un Boton y en su evento Click escribe el siguiente codigo:

Código: Seleccionar todo
   CWnd *pwnd;
   CRect rect;   
   
   pwnd = GetDlgItem(IDC_STATICMOVIBLE);   
   
   pwnd->GetWindowRect(&rect);
   ScreenToClient(&rect);
   rect.top += 30;   
   rect.bottom += 30;
   pwnd->MoveWindow(rect);

el codigo anterior obtiene un puntero a tu Static, obtiene sus coordenadas y las combierte de coordenadas de pantalla al del cliente, luego le agregamos 30 al top (y 30 al bottom para que no se encoja el Static), y lo movemos, ojo si presionamos otra vez en el boton que realizo este movimiento el Control Static seguira bajando cuantos clicks hagas.

2. El Punto dos, te dire que existen clases o controles que te permiten hacer eso, hay una clase derivada de CStatic, chekea codeproject ahi lo encontraras aki te pongo la URL: http://209.171.52.99/staticctrl/cmyhyperlink.asp.

3. Si kieres ke algunos controles acepten otros eventos, entonces debes de krear tu klase derivada y en el Wizar krear una variable de tipo control asociando el kontrol ke kieres ke acepte el nuevo evento a la klase derivada ke kreaste. Si no se me entiende puedes hacer lo siguiente, probemos kon el Punto 2.

Primero pon un Static en tu Dialog ponle el ID: IDC_STATICONLYTK y de Caption http://www.onlytk.tk (un cherry 8) ), luego korre al ClassWizard y krea una Clase kon el boton "Add Class", asegurate ke este derivada de CStatic y has click en aceptar.
Hasta ahi ya tienes tu klase Derivada de CStatic, entonces otra vez abre el ClassWizard y selecciona la nueva clase que creaste, veras que acepta todos los eventos habidos y por haber jejejeje, busca el mensaje WM_MOUSEMOVE, ke sera el enviado por windows a tu kontrol kuando este el mouse encima de este. has dos clicks para ke el ClassWizard te kree la funcion, en esta funcion pon lo siguiente:

Código: Seleccionar todo
   CDC *dc;
   CString strText = "www.onlytk.tk";

   SetWindowText("");
   dc = GetDC();
   dc->SetTextColor(RGB(255,33,255));
   dc->SetBkMode(TRANSPARENT);
   dc->TextOut(0, 0, strText);
   ReleaseDC(dc);
   
   CStatic::OnMouseMove(nFlags, point);


Para terminar, abre el ClassWizard, y en Member variables crea una variable de tipo Control que asocie tu IDC_STATICONLYTK con tu clase que creaste derivada de CStatic.

Eso es todo, al pasar sobre el Static este cambiara su texto a otro color, pero mejor usas el de codeproject ke keda mas bonito jejejeje :oops:

Salu2 :twisted:
El Mejor Blog Underground http://www.onlytk.tk
Avatar de Usuario
onlytk
Usuario Activo
Usuario Activo
 
Mensajes: 28
Registrado: Lun Oct 17, 2005 9:41 pm

Re: RE: cambiar propiedades tiempo de ejecución

Notapor DavidArias el Mié Nov 09, 2005 11:32 am

Muchisimas gracias por tus respuestas.

La No. 1 me funcionó a la perfección.

Con respecto a la No. 2 conozco de estas clases derivadas, pero en mi proyecto no puedo hacer uso de estas ... hay alguna otra manera?

Con respecto a la No. 3 Estoy probandola, aunque no me ha dado ... igual que la anterior, no se puede realizar esto sin incluir clases derivadas?

Mil Gracias
DavidArias
Novato
Novato
 
Mensajes: 11
Registrado: Mié Oct 26, 2005 4:44 pm


Volver a Visual C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado