2012-01-12 14 views
6

我試圖將我的表單正好放在任務欄上方。不幸的是,我的努力受到這樣一個事實的阻礙,我的窗體上的this.Height返回的值比實際窗體(包含所有邊框,標題欄等)要小10個像素。我使用Aero運行Windows 7。當Aero關閉(並且邊界更薄時),所有按預期工作。表單邊框樣式是FixedSingle。我不想實施特定於Aero的黑客行爲。我能做些什麼來獲得正確的身高?如何在運行Aero時確定ACTUAL窗體的窗體大小(包含所有非客戶端元素)?

回答

8

是的,Aero謊言關於由GetWindowRect()返回的窗口大小。這是一個相當重要的appcompat黑客,沒有太多的程序會有一個客戶區太小。不幸的是,既沒有API調用,也沒有可以用來關閉謊言的清單條目。唯一的方法是在EXE標頭中設置Windows版本,並將其標記爲與Vista兼容。

您可以在postbuild事件與Editbin.exe這樣做:

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

當心,你的程序將無法在XP後,這個運行了。


UPDATE:這是現在是默認VS2012做和,當你面向.NET 4.5

+1

哎喲!那麼,因爲這是我自己使用的一個小工具,我想我會忽略它。任何其他方式似乎太小麻煩了這麼小的不精確度(簡單地把我的計算值加10)。 – 2012-01-13 00:29:43

相關問題