CtrlDrawFocus() no dibuja bien el marco (solucionado)

Post Reply
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

CtrlDrawFocus() no dibuja bien el marco (solucionado)

Post by Antonio Linares »

Al seleccionar un item, el recuadro aparece más arriba.

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: CtrlDrawFocus() no dibuja bien el marco

Post 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()
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: CtrlDrawFocus() no dibuja bien el marco

Post 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)
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: CtrlDrawFocus() no dibuja bien el marco

Post 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"
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: CtrlDrawFocus() no dibuja bien el marco

Post 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

   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 ) ) );
   
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: CtrlDrawFocus() no dibuja bien el marco

Post 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/mic ... nload.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...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: CtrlDrawFocus() no dibuja bien el marco

Post 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

   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...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: CtrlDrawFocus() no dibuja bien el marco

Post 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! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Post by cnavarro »

Jod....... Antonio
La explicación de 10
De mayor quiero ser como tu :D :D :D :D
Gracias
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

Te aseguro que tu tambien tienes un nivelazo técnico :-)

Muchos aqui ya lo tienen :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply