2009-09-16 12 views
13

कैसे ढूंढें मैं एक विंडो नियंत्रण की दृश्यता निर्धारित करने की कोशिश कर रहा हूं जो CWnd :: ShowWindow() के साथ छुपा या सक्षम है। (या :: ShowWindow (hWnd, nCmdShow))विंडो की SW_SHOW/SW_HIDE स्थिति

मैं बस उपयोग नहीं कर सकते :: IsWindowVisible (hWnd) के रूप में नियंत्रण एक टैब चादर, जो अपने आप बाहर स्विच किया जा सकता है, गलत वापस जाने के लिए IsWindowVisible के कारण पर है।

क्या SW_SHOW/HIDE (या अन्य) विंडो स्थिति प्राप्त करने का कोई तरीका है या क्या मुझे ShowWindow() के रेटन मान का उपयोग करने की आवश्यकता है और तदनुसार रीसेट करें?

संपादित करें: क्योंकि नियंत्रण को सक्षम करने के लिए सक्षम (या अक्षम) है, लेकिन वर्तमान में दिखाई नहीं दे रहा है, क्योंकि टैब स्विच हो गया है, मुझे लगता है कि यह SW_SHOW स्थिति वही रहेगी, भले ही खिड़की स्वयं वास्तव में स्विच नहीं किया जाता है। अगर मैं अपनी उम्मीदों में अवास्तविक हूं कि यह ठीक है।

तो सच में मैं तलाश कर रहा हूँ 'इस विंडो/नियंत्रण दिखाया जा सकता है'

+0

तो यदि आप एक छिपे हुए टैब पर नियंत्रण करते हैं तो आप किस नतीजे की अपेक्षा करते हैं? –

उत्तर

6

GetWindowPlacement का उपयोग करें। यह WINDOWPLACEMENT संरचना भरता है, जिसमें फ़ील्ड showCmd है।

showCmd
खिड़की की वर्तमान शो राज्य निर्दिष्ट करता है। यह सदस्य निम्न मानों में से एक हो सकता है।

+0

से ज़ेडहान की तुलना में थोड़ा अधिक गहराई से कोशिश करूंगा, हालांकि वह पहले था ... – geocoin

+1

मुझे पता चला है कि अगर आपके पास "दृश्यमान: गलत" के रूप में ध्वजांकित नियंत्रण वाले संवाद हैं और आप ' अन्यथा उन पर 'ShowWindow' को कॉल करें, उन नियंत्रणों पर 'GetWindowPlacement'' अभी भी 'showCmd' फ़ील्ड में 'SW_SHOWNORMAL' वापस कर देगा। 'GetWindowLong (WND, GWL_STYLE) 'दृष्टिकोण सही तरीके से काम करता है। – StilesCrisis

-1

मैं अगर वहाँ एक उचित इस कार्य के लिए विधि लेकिन मैं WindowFromPoint Function.

की कोशिश करेंगे पता नहीं है

टिप्पणियां

WindowFromPoint समारोह एक छिपा या विकलांग खिड़की करने के लिए एक संभाल पुनः प्राप्त नहीं करता है, भले ही बिंदु खिड़की के भीतर है। एक आवेदन को गैर-क्रिएटिव खोज के लिए ChildWindowFromPoint फ़ंक्शन का उपयोग करना चाहिए।

उदाहरण के लिए मैं नियंत्रण कोने कॉर्ड को स्क्रीन कॉर्ड में परिवर्तित कर दूंगा और फिर उन बिंदुओं से इसे संभालने का प्रयास करूंगा।

+0

इससे अप्रत्याशित परिणाम समूह समूह जैसे नियंत्रण हो सकते हैं जो उनके भाई बहनों को ओवरलैप कर सकते हैं और उन्हें दृष्टि में शामिल कर सकते हैं। यदि कोई असंबद्ध पॉपअप है जो गलत समय पर स्क्रीन में गलत जगह पर होता है तो भी तोड़ देगा। – BrendanMcK

+0

@ ब्रेंडन, आप इसके बारे में सही हैं। मुझे यह उल्लेख करना चाहिए था कि यह एक विश्वसनीय विधि नहीं है। –

2

मैं GetWindowPlacement का उपयोग करूंगा, हालांकि मुझे यकीन नहीं है कि मैं समझ रहा हूं कि आप क्या चाहते हैं। यह WINDOWPLACEMENT संरचना में भरता है और फिर showCmd सदस्य का उपयोग करता है।

+0

ऐसा लगता है कि मैं क्या कर रहा हूं। (आप किरील से पहले मिल गए थे) मैं इसे – geocoin

11

GetWindowLong(handle, GWL_STYLE) पर कॉल करें, WS_VISIBLE शैली उपस्थिति के लिए लौटाए गए मूल्य की जांच करें।

+2

निश्चित रूप से यह IsWindowVisible जैसा ही है - जो मैंने पहले ही कहा है कि मुझे गलत परिणाम दे रहा है (इस स्थिति के लिए) – geocoin

+4

एमएसडीएन आपका मित्र है (http://msdn.microsoft.com/en-us/library/ms633530(v= बनाम.85) .aspx) - IsWindowVisible खिड़की और सभी पूर्वजों के लिए WS_VISIBLE शैली की जांच करता है ("यदि निर्दिष्ट विंडो, इसकी मूल विंडो, उसके माता-पिता की मूल विंडो, और आगे, WS_VISIBLE शैली है, तो वापसी मान nonzero है अन्यथा, वापसी मान शून्य है। "), लेकिन यह केवल खिड़की के अपने राज्य की जांच करता है। इसलिए इसे अपने माता-पिता के सापेक्ष उस एचडब्ल्यूएनडी की "स्थानीय" दृश्यता मानें (जो आप जो खोज रहे थे उसके जैसा लगता है); जबकि IsWindowVisible नेट "वैश्विक" परिणाम है। – BrendanMcK

+1

यह उपयोग करने का सही दृष्टिकोण है; 'GetWindowPlacement' सटीक नहीं है। मैंने पाया है कि यदि आपके पास "दृश्यमान: गलत" के रूप में फ़्लैग किए गए नियंत्रणों वाला एक संवाद है और आप अन्यथा उन पर 'शोविंडो' नहीं कहते हैं, तो उन नियंत्रणों पर 'GetWindowPlacement'' अभी भी 'showCmd' फ़ील्ड में 'SW_SHOWNORMAL' वापस कर देगा । – StilesCrisis

0

GetWindowPlacement() फ़ंक्शन केवल तभी काम करेगा जब विंडो अधिकतम या न्यूनतम हो। अन्यथा, showCmd सदस्य वापस आ जाएगी SW_SHOWNORMAL भी जब खिड़की छिपा हुआ है, के रूप में इस StackOverflow जवाब में बताया: WINDOWPLACEMENT's showCmd... always 1?

आप और अधिक सरल बूलियन समारोह IsWindowVisible() प्राप्त करने के लिए करता है, तो निर्दिष्ट विंडो एक दृश्य अवस्था में है या नहीं का उपयोग कर सकते ।

0

यदि यह एक बहु टैब संवाद और नहीं एक नियंत्रण है, तो

रूप
void MyClass::OnShowWindow(BOOL bShow, UINT nStatus) 
{ 
    m_nCmdShow = bShow; 
    CDialog::OnShowWindow(bShow, nStatus); 
} 

BEGIN_MESSAGE_MAP में, ON_WM_SHOWWINDOW जोड़ने ओवरराइड()।

m_nCmdShow अब स्थिति है यदि विंडो SW_SHOW या SW_HIDE है।

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