2012-01-12 6 views
6

मैं अपने फॉर्म को टास्कबार के ठीक ऊपर रखने की कोशिश कर रहा हूं। दुर्भाग्य से मेरे प्रयास इस तथ्य से बाधित हैं कि मेरे फॉर्म पर this.Height एक मान देता है जो वास्तविक रूप से 10 पिक्सल छोटा है (सभी सीमाओं, शीर्षक पट्टी, आदि के साथ)। मैं एरो के साथ विंडोज 7 चला रहा हूँ। जब एरो बंद हो जाता है (और सीमाएं पतली होती हैं), सभी काम अपेक्षित होते हैं। फॉर्म सीमा शैली FixedSingle है। मैं एयरो-विशिष्ट हैक्स को लागू नहीं करना चाहता हूं। सही ऊंचाई पाने के लिए मैं क्या कर सकता हूं?एरो चलाने पर ACTUAL विंडोज़ फॉर्म आकार (सभी nonclient तत्वों के साथ) कैसे निर्धारित करें?

उत्तर

8

हां, एरो GetWindowRect() द्वारा लौटाए गए विंडो आकार के बारे में है। यह एक महत्वपूर्ण ऐपकंपैप हैक है, इसके बिना बहुत सारे कार्यक्रमों में एक क्लाइंट क्षेत्र होगा जो बहुत छोटा है। दुर्भाग्यवश न तो एक एपीआई कॉल है और न ही एक मैनिफेस्ट एंट्री है जिसका उपयोग झूठ को बंद करने के लिए किया जा सकता है। एकमात्र तरीका है कि विंडोज संस्करण को EXE शीर्षलेख में सेट करना और Vista को संगत चिह्नित करना है।

आप एक postbuild घटना में Editbin.exe के साथ ऐसा कर सकते हैं:

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

खबरदार है कि अपने कार्यक्रम इस के बाद अब और XP में नहीं चलेंगे।


अद्यतन: यह अब और VS2012 में डिफ़ॉल्ट रूप से किया जाता है जब आप लक्षित .NET 4.5

+1

आउच! खैर, चूंकि यह मेरे अपने उपयोग के लिए एक छोटी उपयोगिता है, मुझे लगता है कि मैं इसे तब अनदेखा कर दूंगा। किसी भी अन्य तरीके से इस तरह के एक छोटे से अपर्याप्तता के लिए बहुत परेशानी होती है (मेरी गणना के लिए एक +10 हैकिंग से कम)। –

संबंधित मुद्दे