Page 1 of 1

CtrlDrawFocus() no dibuja bien el marco (solucionado)

PostPosted: Fri Aug 15, 2014 12:45 pm
by Antonio Linares
Al seleccionar un item, el recuadro aparece más arriba.

A ver si damos con la solución, gracias! :-)

Re: CtrlDrawFocus() no dibuja bien el marco

PostPosted: Fri Aug 15, 2014 12:48 pm
by Antonio Linares
Cristobal,

Por lo que veo Timm usa una ventana principal MDI y no lo he verificado pero imagino que las áreas sean ventanas MDICHILDs.

Lo has comprobado tu ? gracias

Esto influiría en el comprotamiento de CtrlDrawFocus()

Re: CtrlDrawFocus() no dibuja bien el marco

PostPosted: Fri Aug 15, 2014 12:50 pm
by cnavarro
Eso es lo que estaba mirando antes de ponerme con las Transparencias
Porque el tema del desplazamiento hacia abajo de los items cuando usaba el scroll podia ser tambien por el cambio de coordenadas, es a lo que te refieres?
O por los valores que toma (que imagino que dependerían de la resolucion usada)

Re: CtrlDrawFocus() no dibuja bien el marco

PostPosted: Fri Aug 15, 2014 2:11 pm
by Antonio Linares
Cristobal,

Me refiero a que en CtrlDrawFocus() comprobamos si hay "padres" del control con "caption", luego en el caso de ser MDICHILD, tendriamos la ventana MDICHILD contenedora, y la ventana principal de la aplicación. No he comprbado si hay algun otro "padre" (contenedor) intermedio.

Las coordenadas se ajustan en función de esos "padres" con "caption"

Re: CtrlDrawFocus() no dibuja bien el marco

PostPosted: Fri Aug 15, 2014 2:17 pm
by Antonio Linares
Cristobal,

Efectivamente esta usando MDICHILDs (aun no he verificado si usa algún contenedor intermedio).

Y con este pequeño cambio en CtrlDrawFocus() de FWH ya dibuja el marco bien, ahora el problema es ver como hacer este cambio sin que nos afecte en otras aplicaciones de FWH:

Línea 303 de ctrldraw.c:

Code: Select all  Expand view
  iParentsWithCaption++; // nuevo !!!
   
   pt.x = rct.left;
   pt.y = rct.top;
   ScreenToClient( hWndParent, &pt );
   rct.left = pt.x + ( iParentsWithCaption * GetSystemMetrics( SM_CXFRAME ) );
   rct.top  = pt.y + ( iParentsWithCaption * ( GetSystemMetrics( SM_CYCAPTION   ) + GetSystemMetrics( SM_CYFRAME ) ) );
   

Re: CtrlDrawFocus() no dibuja bien el marco

PostPosted: Fri Aug 15, 2014 2:45 pm
by Antonio Linares
Cristobal,

Usando Spy++ de Microsoft, que no viene incluido en la versión express de Visual Studio, pero lo he encontrado aqui:

http://mdb-blog.blogspot.mx/2010/11/microsoft-spy-or-spyxx-for-download.html

he podido salir de dudas. Efectivamente cada área es una ventana MDICHILD sin titulo. Encima de ella hay un bitmap para cada regla (superior e izquierda) y el título que vemos es un control static, sobre el que hay otro static con el título y dos TBtnBmps.

Voy a probar a cambiar CtrlDrawFocus() para que no cuente los títulos sino los padres...

Re: CtrlDrawFocus() no dibuja bien el marco

PostPosted: Fri Aug 15, 2014 3:05 pm
by Antonio Linares
Ok, lo he solucionado pero de otra forma.

Las ventanas MDICHILD que usa Timm aunque no muestran su caption, si lo tienen asignado. Entonces he caido en la cuenta de que es la ventana MDICLIENT la que no se estaba teniendo en cuenta y lo he solucionado asi:

Code: Select all  Expand view
  while( GetParent( hWndParent ) )
   {
      #ifndef UNICODE
         char ClassName[ 100 ];
      
         GetClassName( hWndParent, ClassName, 99 );

         if( strcmp( ClassName, "#32770" ) == 0 ) // a Modal Dialog
            break;

         if( lstrcmp( ClassName, "MDIClient" ) == 0 ) // MDIClient
            iParentsWithCaption++;   


Ya está funcionando bien. El único problema que le veo a esto es que no le funcionará bien a quien no tenga un FWH actualizado, asi que lo suyo es copiar esta función en los fuentes de ER. Voy a probarlo...

Re: CtrlDrawFocus() no dibuja bien el marco

PostPosted: Fri Aug 15, 2014 3:15 pm
by Antonio Linares
Ok, probado y subido al repositorio de ER.

Rogaría que alguien lo pruebe, que no tenga este cambio en FWH, para que así nos aseguremos de que funciona correctamente.

Gracias! :-)

Re: CtrlDrawFocus() no dibuja bien el marco (solucionado)

PostPosted: Fri Aug 15, 2014 9:04 pm
by cnavarro
Jod....... Antonio
La explicación de 10
De mayor quiero ser como tu :D :D :D :D
Gracias

Re: CtrlDrawFocus() no dibuja bien el marco (solucionado)

PostPosted: Fri Aug 15, 2014 9:56 pm
by Antonio Linares
Te aseguro que tu tambien tienes un nivelazo técnico :-)

Muchos aqui ya lo tienen :-)