2012-05-05 14 views
5

मुख्य व्यय शुरू होने से पहले मेरे व्युत्पन्न CWinApp के निर्माता को क्यों बुलाया जाना चाहिए?एमएफसी में मुझे CWinApp का वैश्विक उदाहरण बनाने की आवश्यकता क्यों है?

int WinMain() 
{ 
    CMainFrame* pMainFrame = new CMainFrame; 
    // etc ... 
} 

मैं तकनीकी कारण यह है कि इस व्यवहार बलों के लिए देख रहा हूँ:
क्यों यह कुछ की तरह नहीं हो सकता।
संपादित करें:
स्पष्ट करने के लिए - यदि मैं एमएफसी के बिना Win32 API का उपयोग कर रहा हूं तो मुख्य विंडो WinMain के अंदर बनाई गई है तो क्या अंतर है?

+0

संभवत: 'मुख्य' फ़ंक्शन चलाने से पहले 'CWinApp' के लिए कन्स्ट्रक्टर * चलाया जाता है। लेकिन मुझे वास्तव में यकीन नहीं है; मैंने यह देखने के लिए कभी भी ऐसा करने की कोशिश नहीं की है कि यह काम करता है या नहीं। क्या तुम? –

+0

@ कोडीग्रे हां मैंने कोशिश की। एप्लिकेशन AfxWinMain –

+0

के अंदर दुर्घटनाग्रस्त हो जाता है आह हां, ठीक उसी तरह फ्रेडरिक का उत्तर भविष्यवाणी करता है। 'CWinApp' के लिए कन्स्ट्रक्टर कुछ राज्य चर के मान को सेट कर रहा है, जो 'AfxWinMain' द्वारा अपेक्षित है। –

उत्तर

3

असल में, ऐसा इसलिए है क्योंकि एमएफसी डिजाइनरों ने लाइब्रेरी में एप्लिकेशन एंट्री पॉइंट (WinMain(), main()) प्रदान करने का निर्णय लिया है, इसलिए उपयोगकर्ताओं को एक लिखना नहीं होगा।

आवेदन के प्रारंभ और समाप्ति तर्क तो एक उपयोगकर्ता द्वारा प्रदान की CWinApp व्युत्पन्न सिंगलटन के कहने के InitInstance() और ExitInstance() तरीकों के लिए जगह बदली है। यह उदाहरण WinMain() रन से पहले मौजूद होना चाहिए, क्योंकि यह उपरोक्त तरीकों (और Run() संदेश लूप दर्ज करने के लिए) कहता है और राज्य को संग्रहीत करने के लिए इसका उपयोग करता है (nCmdShow तर्क जो इसे प्राप्त करता है)।

CWinApp परिभाषित करना - वैश्विक दायरे में अनुमानित उदाहरण यह सुनिश्चित करने का एक आसान तरीका है कि यह WinMain() रनों के समय मौजूद है।

This article में एमएफसी एप्लिकेशन शुरू होने पर हुड के नीचे क्या होता है, इसके बारे में अतिरिक्त जानकारी है।

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