मुझे लगता है कि आपके प्रश्न का उत्तर ज्यादातर ऐतिहासिक है, अगर आप पीछे देखते हैं कि कैसे दो पुस्तकालयों की उत्पत्ति हुई और समय के माध्यम से विकसित हुआ।
संक्षिप्त उत्तर है, यदि आप "फैंसी" कुछ भी नहीं कर रहे हैं, तो एटीएल का उपयोग करें। COM में फेंके गए साधारण यूजर इंटरफेस के लिए यह बहुत अच्छा है।
लंबे उत्तर: MFC को 90 के दशक की शुरुआत में C ++ नामक इस नई भाषा को आज़माने और इसे विंडोज पर लागू करने के लिए बनाया गया था। इसने कार्यालय को विकास समुदाय के लिए उपलब्ध सुविधाओं की तरह बनाया जब ओएस उन्हें अभी तक नहीं था।
[संपादित करें: मैं Microsoft में काम नहीं करता था, इसलिए मुझे नहीं पता कि क्या कार्यालय कभी MFC पर बनाया गया था, लेकिन मुझे लगता है कि इसका उत्तर नहीं है। विन 3.1 में वापस, 95 दिनों में जीतें, ऑफिस यूआई टीम नए नियंत्रणों का आविष्कार करेगी, उन्हें पुस्तकालयों में पैकेज करेगी, फिर विंडोज और एमएफसी की टीमें रिडिस्ट्रांएबल डीएल के साथ उन नियंत्रणों के लिए रैपर और एपीआई को शामिल करेंगी। मुझे लगता है कि उन टीमों के बीच सहयोग और कोड साझा करने का एक सा था। अंततः वे नियंत्रण इसे सर्विस पैक या अगले विंडोज संस्करण में आधार ऑपरेटिंग सिस्टम में बदल देंगे। यह पैटर्न ऑफिस रिबन के साथ जारी रहा जिसे ऑफिस शिप के बाद विंडोज में ऐड-ऑन कंपोनेंट के रूप में जोड़ा गया था, और अब यह विंडोज ओएस का हिस्सा है।]
उस समय पुस्तकालय काफी आदिम था, क्योंकि C ++ भाषा और संकलक दोनों नए होने के कारण, और Microsoft ने समय के साथ कार्यालय का निर्माण किया।
इस इतिहास के कारण, MFC:
- एक काफी स्पष्ट डिजाइन है। यह विंडोज एपीआई के आसपास एक हल्के आवरण के रूप में शुरू हुआ, लेकिन बढ़ता गया। थोड़ा 'फीचर्स' का एक गुच्छा है, जिसका आविष्कार किया जाना था क्योंकि संकलक और भाषा ने उनका समर्थन नहीं किया। कोई टेम्प्लेट नहीं थे, उन्होंने एक स्ट्रिंग क्लास का आविष्कार किया, उन्होंने सूची कक्षाओं का आविष्कार किया, उन्होंने अपने स्वयं के रन टाइम प्रकार की पहचान तैयार की, आदि।
- कार्यालय और विंडोज विकास के 20 वर्षों को शामिल करता है, जिसमें आपके द्वारा उपयोग किए जाने वाले सामान का पूरा बोझ शामिल होता है: एकल और एकाधिक दस्तावेज़ इंटरफ़ेस, DDE, COM, COM +, DCOM, दस्तावेज़ लिंकिंग और एम्बेडिंग (ताकि आप किसी शब्द दस्तावेज़ को एम्बेड कर सकें। यदि आप चाहते हैं कि आपका ऐप), ActiveX नियंत्रण (वेब के लिए ऑब्जेक्ट एम्बेडिंग का विकास!), संरचित दस्तावेज़ संग्रहण, सीरियललाइज़ेशन और संस्करण, स्वचालन (प्रारंभिक VBA वर्षों से), और निश्चित रूप से MVC। नवीनतम संस्करणों में विज़ुअल स्टूडियो स्टाइल विंडो डॉकिंग और ऑफिस रिबन के लिए समर्थन है। मूल रूप से 20 साल में रेडमंड से बाहर हर तकनीक कहीं न कहीं है। यह सिर्फ बड़ा है!
- एक छोटी सी गौचे, कीड़े, वर्कअराउंड, मान्यताओं, उन चीजों के लिए समर्थन है जो अभी भी वहां हैं जो आप कभी भी उपयोग नहीं करेंगे, और वे समस्याएं पैदा करते हैं। आपको कई वर्गों के कार्यान्वयन के साथ अंतरंग रूप से परिचित होना चाहिए और वे एक सभ्य आकार की परियोजना पर इसका उपयोग करने के लिए कैसे बातचीत करते हैं। डिबगिंग के दौरान MFC सोर्स कोड में डिलीट होना आम है। कुछ पॉइंटर पर 15 साल पुराने तकनीकी नोट को खोजने से अशक्त होने का कारण बनता है। प्राचीन दस्तावेज़ एम्बेड करने वाले सामान के प्रारंभिककरण पर अनुमान आपके आवेदन को अजीब तरीकों से प्रभावित कर सकते हैं। एमएफसी में अमूर्तता जैसी कोई चीज नहीं है, आपको इसके साथ रोजाना quirks और internals के साथ काम करने की आवश्यकता है, यह कुछ भी नहीं छिपाता है। और मुझे क्लास के जादूगर पर शुरू मत करो।
AT ++ का आविष्कार C ++ भाषा के रूप में हुआ, और टेम्प्लेट आए। ATL MFC लाइब्रेरी की रन-टाइम समस्याओं से बचने के लिए टेम्प्लेट का उपयोग करने का एक प्रदर्शन था:
- संदेश मैप्स: चूंकि वे टेम्पलेट आधारित हैं, इसलिए प्रकारों की जांच की जाती है, और यदि आप बाध्य फ़ंक्शन को पेंच करते हैं, तो यह निर्माण नहीं करता है। MFC मेसेज में मैप्स मैक्रो बेस्ड और रन-टाइम बाउंड होते हैं। यह अजीब बग पैदा कर सकता है, संदेश गलत विंडो में रूट हो जाता है, एक क्रैश यदि आपके पास फ़ंक्शन या मैक्रो गलत तरीके से परिभाषित है, या बस काम नहीं करता है क्योंकि कुछ सही नहीं है। डिबग करने के लिए बहुत अधिक कठिन है, और बिना सूचना के तोड़ने के लिए आसान है।
- COM / स्वचालन: संदेश मानचित्रों के समान, COM मूल रूप से मैक्रोज़ का उपयोग करते हुए रन-टाइम बाउंड था, जिसमें बहुत सारी त्रुटि की आवश्यकता होती है और विषम समस्याएं पैदा होती हैं। एटीएल ने इसे खाका आधारित बनाया, समयबद्ध संकलन किया और इससे निपटने के लिए बहुत आसान।
[संपादित करें अलंकरण: जिस समय ATL बनाया गया था, उस समय Microsoft का तकनीकी रोड मैप मुख्य रूप से 'दस्तावेज़ प्रबंधन' पर केंद्रित था। Apple उन्हें डेस्कटॉप प्रकाशन व्यवसाय में मार रहा था। इस स्पेस में प्रतिस्पर्धा करने के लिए ऑफिस के 'डॉक्यूमेंट मैनेजमेंट' फीचर्स को बढ़ाने के लिए ऑफिस 'डॉक्यूमेंट लिंकिंग एंड एंबेडिंग' एक मुख्य घटक था। COM एक मुख्य प्रौद्योगिकी थी जिसे एप्लिकेशन एकीकरण के लिए आविष्कार किया गया था, और दस्तावेज़ एंबेडिंग एपीआई कॉम पर आधारित थे। इस उपयोग के मामले के लिए MFC का उपयोग करना मुश्किल था। ATL, COM को लागू करने और दस्तावेज़ एम्बेडिंग सुविधाओं का उपयोग करने के लिए 3 जी पार्टी के लिए इस विशेष तकनीक को आसान बनाने के लिए एक अच्छा समाधान था।]
ये थोड़े से सुधार ATL को एक सरल अनुप्रयोग से निपटने के लिए बेहद आसान बनाते हैं, जिसे MFC की विशेषताओं जैसे सभी कार्यालय की आवश्यकता नहीं होती है। एक साधारण यूआई के साथ कुछ और कुछ ऑफिस ऑटोमेशन में फेंक दिया। यह छोटा है, यह तेज है, यह बहुत समय और सिरदर्द को बचाने के लिए समयबद्ध संकलन है। MFC के पास कक्षाओं का एक विशाल पुस्तकालय है जो कि क्लूनी हो सकता है, और इसके साथ काम करना मुश्किल है।
दुर्भाग्य से एटीएल स्थिर हो गया। यह विंडोज़ एपीआई और COM समर्थन के लिए रैपर था, और फिर यह वास्तव में कभी भी इससे आगे नहीं बढ़ा। जब वेब बंद हुआ, तो यह सब सामान पुरानी खबरों की तरह भूल गया।
[संपादित करें अलंकरण: Microsoft ने महसूस किया कि यह 'इंटरनेट थिंग' बड़ा होने जा रहा था। डिस्ट्रिब्यूटेड ट्रांजैक्शन सर्वर में इंटरनेट एक्सप्लोरर, विंडोज सर्वर, आईआईएस, एएसपी, एसक्यूएल सर्वर, कॉम / डीसीओएम पर ध्यान केंद्रित करने के लिए उनके तकनीकी रोड मैप में काफी बदलाव आया। इसलिए डॉक्यूमेंट लिंकिंग और एंबेडिंग अब उच्च प्राथमिकता नहीं थी।]
MFC के विशाल पदचिह्न ने उन्हें डंप करना असंभव बना दिया, इसलिए यह अभी भी धीरे-धीरे विकसित होता है। टेम्पलेट्स को वापस पुस्तकालय में शामिल किया गया है, साथ ही साथ अन्य भाषा और एपीआई संवर्द्धन भी। (मैंने WTL के बारे में तब तक नहीं सुना था जब तक मैंने यह सवाल नहीं देखा था। :)
अंत में, जो एक का उपयोग करने के लिए बस प्राथमिकता का मामला है। आपके लिए आवश्यक अधिकांश सुविधाएँ आधार OS API में हैं, जिसे आप लाइब्रेरी से सीधे कॉल कर सकते हैं, अगर लाइब्रेरी में कोई उपयुक्त रैपर नहीं है।
कई वर्षों के लिए MFC का उपयोग करने के आधार पर मेरे 2 सेंट, और मैं इसे अब दैनिक उपयोग करता हूं। जब मैं पहली बार कुछ वर्षों के लिए कुछ परियोजनाओं पर रिलीज़ हुआ था, तब मैंने एटीएल में डब किया था। यह उन दिनों ताजी हवा की सांस थी, लेकिन वास्तव में कभी भी कहीं भी नहीं गई। और फिर वेब साथ आया और मैं इसके बारे में सब भूल गया।
संपादित करें: इस उत्तर में आश्चर्यजनक दीर्घायु है। चूंकि यह मेरे स्टैक ओवरफ्लो पेज में पॉप अप करता रहता है, मैंने सोचा कि मैं मूल उत्तर के लिए कुछ अलंकरण जोड़ूंगा जो मुझे लगा कि कमी थी।