2012-01-12 13 views
6

Estoy tratando de colocar mi formulario precisamente encima de la barra de tareas. Lamentablemente, mis esfuerzos se ven obstaculizados por el hecho de que this.Height en mi formulario devuelve un valor que es 10 píxeles más pequeño que el formulario real (con todos los bordes, barra de título, etc.). Estoy ejecutando Windows 7 con Aero. Cuando Aero se apaga (y los bordes son más delgados), todo funciona como se espera. El estilo de borde de formulario es FixedSingle. No quiero implementar hacks específicos de Aero. ¿Qué puedo hacer para obtener la altura correcta?¿Cómo determinar el tamaño real del formulario de Windows (con todos los elementos no cliente) cuando se ejecuta Aero?

Respuesta

8

Sí, Aero miente sobre el tamaño de ventana devuelto por GetWindowRect(). Es un truco de appcompat bastante importante, sin él demasiados programas tendrían un área de cliente demasiado pequeña. Lamentablemente, no hay una llamada de API ni una entrada de manifiesto que se pueda utilizar para desactivar la mentira. La única forma es establecer la versión de Windows en el encabezado EXE y marcarla compatible con Vista.

Puede hacerlo con Editbin.exe en un evento postbuild:

set pathsave=%path% 
set path=$(devenvdir);$(devenvdir)..\..\vc\bin 
editbin.exe /subsystem:windows,6.0 "$(targetfilename)" 
set path=%pathsave% 

Mira que el programa no se ejecutará en XP más después de esto.


ACTUALIZACIÓN: Esto se hace ahora por defecto en VS2012 y hasta cuando el destino de .NET 4.5

+1

Ay! Bueno, ya que esta es una pequeña utilidad para mi propio uso, supongo que simplemente lo ignoraré. Cualquier otra forma parece demasiada molestia para una imprecisión tan pequeña (excepto simplemente piratear un +10 a mis cálculos). –

Cuestiones relacionadas