मैं ऐसे एप्लिकेशन पर काम कर रहा हूं जो एक इंस्टॉलर के लिए बूटस्ट्रैप होता है जिसे मैं भी काम कर रहा हूं। एप्लिकेशन कुछ एमएसआई कॉल करता है जो मुझे प्राप्त करने के लिए आवश्यक जानकारी प्राप्त करने के लिए कुछ एमएसआई कॉल करता है जो कि मेरे एप्लिकेशन की मुख्य विंडो है, जो जानकारी एकत्र होने के दौरान प्रगति विंडो खोलने का कारण बनती है और फिर एक बार हो जाने के बाद दूर जाती है। फिर जादूगर स्थापित और लॉन्च किया गया है। मेरी समस्या यह है कि विज़ार्ड (सीप्रोपर्टी शीट से व्युत्पन्न) आगे नहीं आना चाहता और ऐसा करने के लिए कुछ कॉल जोड़ने के बिना सक्रिय एप्लिकेशन बनना नहीं चाहता।मैं अपने ऐप को सामने आने और फोकस करने के लिए कैसे मजबूर करूं?
मैं अपने OnInitDialog() विधि में निम्न कोड के साथ सामने करने के लिए इसे लाने की समस्या को हल कर दिया है:
SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // force window to top
SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // lose the topmost status that the previous line gave us
मेरे समस्या यह है कि मैं अभी भी पता लगा नहीं है कि कैसे खिड़की बनाने के लिए है आत्म-सक्रिय (यानी, स्वयं को वह बनाओ जिस पर ध्यान केंद्रित किया गया हो)। SetFocus() इस संदर्भ में काम नहीं करेगा। मुझे ऐसा कुछ चाहिए जो खिड़की को ज़ेड-ऑर्डर के शीर्ष पर मजबूर करे और इसे सक्रिय करे, अधिमानतः जितना संभव हो उतना कॉल करें।
मेरा अनुमान है कि एमएसआई कॉल द्वारा शुरुआत में खोला गया प्रगति विंडो मुख्य खिड़की को खराब करने का कारण बन रही है, लेकिन मेरे पास उस खिड़की को दिखने से रोकने का कोई तरीका नहीं है। इसके अलावा, इसे छिपाने के लिए यह समझ में नहीं आता है, क्योंकि यह उपयोगकर्ता को पता चलता है कि मुख्य विंडो आने से पहले क्या हो रहा है।
ने कोशिश नहीं की है, लेकिन मुझे लगता है कि यह BringWindowToTop() से अधिक प्रभावी नहीं है। (मिच गेहूं के जवाब पर मेरी टिप्पणी देखें।) – RobH