2010-06-04 19 views
7

मेरे पास मेरे डायलॉग क्लास में ऑनमोव हैंडलर है, जो नियंत्रण वस्तुओं (यानी एक सीबीटन) के साथ कुछ सामान करता है। मुझे लगता है कि इस हैंडलर को संवाद से पहले कॉल किया जाता है OnInitDialog विधि कहा जाता है, और इसलिए जब मैं बाल नियंत्रण पर विधियों को कॉल करने का प्रयास करता हूं, तो मुझे डीबग में एसएसएसआरटीएस मिलते हैं क्योंकि नियंत्रण अभी तक मौजूद नहीं है ... वे OnInitDialog में बनाए जाते हैं ।कैसे बताया जाए कि कोई एमएफसी संवाद बनाया/प्रारंभ किया गया है या नहीं?

  1. मैं कैसे बताऊँ संवाद प्रारंभ कर दिया गया है

    दो चीजें मैं जाँच करने में सक्षम होना चाहते हैं क्या है?

  2. मैं एक व्यक्तिगत सीडब्ल्यूएनडी नियंत्रण ऑब्जेक्ट की विंडो कैसे बना सकता हूं?

दोनों मामलों में मैं कक्षा के सदस्यों या विधि कॉल परिणामों की तलाश कर रहा हूं जिनका उपयोग किया जा सकता है।

उत्तर

7
  1. OnInitDialog

  2. में एक ध्वज सेट अपने संवाद के m_hWnd का उपयोग करें:

    if (::IsWindow(m_Ctrl.m_hWnd)) { 
        ... 
    } 
    
+0

मैं कस्टम कोड लिख नहीं करना चाहता है, तो 2 बेहतर लग रहा है। क्या कोई अन्य सदस्य है जिसका मैं परीक्षण कर सकता हूं? –

+3

GetSafeHwnd() लेकिन यह सिर्फ एक रैपर है :: IsWindow()। ऑब्जेक्ट उन्मुखता की अवधि में मुझे लगता है कि मैन्युअल रूप से हैंडल से पूछताछ करने से यह अच्छा है - मुझे व्यक्तिगत रूप से हैंडल का निरीक्षण करने के 'निम्न-स्तर' नियंत्रण को पसंद है। – Roel

+1

'GetSafeHwnd()' 'IsWindow()' के चारों ओर एक रैपर नहीं है - यह 'm_hWnd' के आसपास एक रैपर है - यह मानक जांचने के लिए गैर मानक सी ++ है, और यह' m_hWnd' या 'null' वापस लौटाता है। खिड़की नहीं होने पर 'm_hWnd' शून्य नहीं हो सकता है (जैसे फ़ाइल संभाल शून्य नहीं हो सकता है लेकिन फ़ाइल बंद हो सकती है) – Mordachai

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

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