2012-01-12 6 views
6

Sto provando a posizionare il mio modulo esattamente sopra la barra delle applicazioni. Sfortunatamente i miei sforzi sono ostacolati dal fatto che lo this.Height sul mio modulo restituisce un valore che è 10 pixel più piccolo della forma attuale (con tutti i bordi, la barra del titolo, ecc.). Sto usando Windows 7 con Aero. Quando Aero è disattivato (e i bordi sono più sottili), tutto funziona come previsto. Lo stile del bordo del modulo è FixedSingle. Non voglio implementare hack specifici per Aero. Cosa posso fare per ottenere l'altezza corretta?Come determinare la dimensione del modulo di Windows EFFETTIVO (con tutti gli elementi non secondari) durante l'esecuzione di Aero?

risposta

8

Sì, Aero si basa sulla dimensione della finestra restituita da GetWindowRect(). È un hack appcompat piuttosto importante, senza che troppi programmi abbiano un'area client troppo piccola. Sfortunatamente non esiste né una chiamata API né una voce manifest che possa essere utilizzata per disattivare la bugia. L'unico modo è impostare la versione di Windows nell'intestazione EXE e contrassegnarla compatibile con Vista.

È possibile farlo con Editbin.exe in un evento postbuild:

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

Attenzione che il programma non funzionerà in XP più dopo questo.


UPDATE: questo ora è fatto per impostazione predefinita in VS2012 e quando si target .NET 4.5

+1

Ouch! Bene, dal momento che questa è una piccola utilità per il mio uso, suppongo che allora la ignorerò. Qualsiasi altro modo sembra troppo complicato per una così piccola imprecisione (a parte semplicemente hackerare un +10 ai miei calcoli). –

Problemi correlati