2012-01-12 25 views
6

Tôi đang cố định vị trí biểu mẫu của mình chính xác phía trên thanh tác vụ. Thật không may, những nỗ lực của tôi bị cản trở bởi thực tế là this.Height trên biểu mẫu của tôi trả về một giá trị nhỏ hơn 10 pixel so với hình thức thực tế (với tất cả các đường viền, thanh tiêu đề, v.v.). Tôi đang chạy Windows 7 với Aero. Khi Aero bị tắt (và các đường viền mỏng hơn), tất cả đều hoạt động như mong đợi. Kiểu đường viền của biểu mẫu là FixedSingle. Tôi không muốn thực hiện hacks Aero cụ thể. Tôi có thể làm gì để có được chiều cao chính xác?Làm thế nào để xác định kích thước biểu mẫu cửa sổ ACTUAL (với tất cả các phần tử không phải là tiện ích) khi chạy Aero?

Trả lời

8

Có, Aero nằm về kích thước cửa sổ được trả về bởi GetWindowRect(). Nó là một hack appcompat khá quan trọng, mà không có nó quá nhiều chương trình sẽ có một khu vực khách hàng đó là quá nhỏ. Rất tiếc, không có lệnh gọi API cũng như mục nhập tệp kê khai nào có thể được sử dụng để tắt lời nói dối. Cách duy nhất là thiết lập phiên bản Windows trong tiêu đề EXE và đánh dấu nó tương thích với Vista.

Bạn có thể làm như vậy với Editbin.exe trong một sự kiện postbuild:

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

Ghi chú rằng chương trình của bạn sẽ không chạy trong XP nữa sau này.


UPDATE: điều này bây giờ được thực hiện theo mặc định trong VS2012 và lên khi bạn nhắm mục tiêu NET 4.5

+1

Ouch! Vâng, vì đây là một tiện ích nhỏ cho việc sử dụng của riêng tôi, tôi đoán tôi sẽ bỏ qua nó sau đó. Bất kỳ cách nào khác có vẻ như quá nhiều rắc rối cho một sự thiếu chính xác nhỏ như vậy (ngắn chỉ đơn giản là hack một 10 để tính toán của tôi). –