Saya pikir jawaban atas pertanyaan Anda sebagian besar bersifat historis, jika Anda melihat kembali bagaimana kedua perpustakaan itu berasal dan berkembang seiring waktu.
Jawaban singkatnya adalah, jika Anda tidak melakukan sesuatu yang "mewah", gunakan ATL. Ini bagus untuk antarmuka pengguna yang sederhana dengan COM yang dimasukkan.
Jawaban panjangnya: MFC dibangun pada awal 90-an untuk mencoba bahasa baru ini yang disebut C ++ dan menerapkannya ke Windows. Itu membuat Office seperti fitur tersedia untuk komunitas pengembangan ketika OS belum memilikinya.
[Edit hiasan: Saya tidak bekerja di Microsoft, jadi saya tidak tahu apakah Office pernah dibangun di atas MFC, tapi saya rasa jawabannya tidak. Kembali di Win 3.1, Win 95 hari, tim Office UI akan menemukan kontrol baru, mengemasnya di perpustakaan, kemudian tim Windows dan MFC akan memasukkan pembungkus dan API ke kontrol tersebut dengan dll yang dapat didistribusikan ulang. Saya kira ada sedikit kolaborasi dan berbagi kode antara tim-tim itu. Akhirnya kontrol tersebut akan membuatnya menjadi sistem operasi dasar dalam paket layanan atau versi Windows berikutnya. Pola ini berlanjut dengan Pita Office yang ditambahkan ke Windows sebagai komponen tambahan setelah Office dikirim, dan sekarang menjadi bagian dari OS Windows.]
Pada saat itu pustaka tersebut cukup primitif, baik karena bahasa C ++ dan kompilernya yang baru, dan Microsoft membangunnya seiring waktu seiring perkembangan Office.
Karena sejarah ini, MFC:
- Memiliki desain yang cukup kikuk. Ini dimulai sebagai pembungkus ringan di sekitar API Windows, tetapi berkembang. Ada banyak 'fitur' kecil yang harus diciptakan karena compiler dan bahasanya tidak mendukungnya. Tidak ada templat, mereka menemukan kelas string, mereka menemukan kelas daftar, mereka merancang identifikasi jenis waktu prosesnya sendiri, dll.
- Merangkum 20 tahun evolusi Office dan Windows, yang mencakup seluruh muatan omong kosong yang mungkin tidak akan pernah Anda gunakan: Antarmuka Dokumen Tunggal dan Banyak, DDE, COM, COM +, DCOM, Penautan dan Penyematan Dokumen (sehingga Anda dapat menyematkan dokumen kata di aplikasi Anda jika Anda mau), kontrol ActiveX (evolusi penyematan objek untuk web!), Penyimpanan Dokumen Terstruktur, Serialisasi dan Pembuatan Versi, Otomasi (dari tahun-tahun VBA awal), dan tentu saja MVC. Versi terbaru memiliki dukungan untuk docking jendela gaya Visual Studio, dan pita Office. Pada dasarnya setiap teknologi dari Redmond dalam 20 tahun ada di sana. Itu hanya BESAR!
- Memiliki banyak kesalahan kecil, bug, solusi, asumsi, dukungan untuk hal-hal yang masih ada yang tidak akan pernah Anda gunakan, dan mereka menyebabkan masalah. Anda harus akrab dengan implementasi banyak kelas dan bagaimana mereka berinteraksi untuk menggunakannya pada proyek ukuran yang layak. Menggali kode sumber MFC selama debugging adalah hal biasa. Menemukan catatan teknis berusia 15 tahun pada beberapa penunjuk menjadi nol yang menyebabkan crash masih terjadi. Asumsi tentang inisialisasi dokumen kuno yang menyematkan barang dapat memengaruhi aplikasi Anda dengan cara yang aneh. Tidak ada yang namanya abstraksi di MFC, Anda perlu bekerja dengan kebiasaan dan internal setiap hari, itu tidak menyembunyikan apa pun. Dan jangan biarkan saya memulai wizard kelas.
ATL ditemukan saat bahasa C ++ berevolusi, dan templat tiba. ATL adalah contoh cara menggunakan template untuk menghindari masalah run-time pustaka MFC:
- Peta pesan: Karena berbasis template, tipe diperiksa, dan jika Anda mengacaukan fungsi terikat, itu tidak dibangun. Dalam peta pesan MFC berbasis makro, dan run-time terikat. Hal ini dapat menyebabkan bug aneh, pesan diarahkan ke jendela yang salah, crash jika Anda memiliki fungsi atau makro yang didefinisikan secara tidak benar, atau hanya tidak berfungsi karena ada sesuatu yang tidak terhubung dengan benar. Jauh lebih sulit untuk di-debug, dan lebih mudah dipecah tanpa menyadarinya.
- COM / Automation: Mirip dengan peta pesan, COM awalnya terikat waktu berjalan menggunakan Macro, membutuhkan banyak penanganan kesalahan dan menyebabkan masalah aneh. ATL membuatnya berbasis template, mengkompilasi terikat waktu, dan jauh lebih mudah untuk ditangani.
[Edit Hiasan: Pada saat ATL dibuat, peta jalan teknis Microsoft difokuskan pada 'Manajemen Dokumen'. Apple membunuh mereka dalam bisnis penerbitan desktop. 'Penautan dan Penyematan Dokumen' Office merupakan komponen utama untuk meningkatkan fitur 'Manajemen Dokumen' Office agar dapat bersaing di ruang ini. COM adalah teknologi inti yang diciptakan untuk integrasi aplikasi, dan API Penyematan Dokumen didasarkan pada COM. MFC sulit digunakan untuk kasus penggunaan ini. ATL adalah solusi yang baik untuk membuat teknologi khusus ini lebih mudah bagi pihak ketiga untuk mengimplementasikan COM dan memanfaatkan fitur penyematan dokumen.]
Perbaikan kecil ini membuat ATL sangat lebih mudah untuk ditangani pada aplikasi sederhana yang tidak membutuhkan semua kantor seperti fitur MFC. Sesuatu dengan UI sederhana dan beberapa otomatisasi Office dimasukkan. Kecil, cepat, kompilasi terikat waktu, menghemat banyak waktu dan sakit kepala. MFC memiliki perpustakaan kelas yang sangat besar yang bisa jadi kikuk, dan sulit untuk dikerjakan.
Sayangnya ATL mandek. Itu memiliki pembungkus untuk Windows API dan dukungan COM, dan kemudian tidak pernah benar-benar melampaui itu. Ketika Web diluncurkan, semua hal ini agak dilupakan sebagai berita lama.
[Edit Hiasan: Microsoft menyadari bahwa 'Internet Thing' ini akan menjadi besar. Peta jalan teknis mereka berubah secara drastis menjadi fokus pada Internet Explorer, Windows Server, IIS, ASP, SQL Server, COM / DCOM di Server Transaksi Terdistribusi. Jadi Penautan dan Penyematan Dokumen tidak lagi menjadi prioritas tinggi.]
Jejak besar MFC tidak memungkinkan mereka untuk dibuang, jadi masih berkembang perlahan. Template telah dimasukkan kembali ke pustaka, serta bahasa lain dan peningkatan API. (Saya belum pernah mendengar tentang WTL sampai saya melihat pertanyaan ini. :)
Pada akhirnya, yang mana yang akan digunakan hanyalah masalah preferensi. Mayoritas fitur yang Anda perlukan ada di API OS dasar, yang bisa Anda panggil langsung dari salah satu pustaka, jika tidak ada pembungkus yang sesuai di pustaka.
Hanya 2 sen saya berdasarkan penggunaan MFC selama bertahun-tahun, dan saya menggunakannya sekarang setiap hari. Saya mencoba-coba ATL ketika pertama kali dirilis di beberapa proyek selama beberapa tahun. Itu adalah menghirup udara segar pada masa itu, tetapi tidak pernah benar-benar pergi ke mana pun. Dan kemudian Web datang dan saya lupa semuanya.
Edit: Jawaban ini memiliki umur panjang yang mengejutkan. Karena terus bermunculan di halaman tumpukan overflow saya, saya pikir saya akan menambahkan beberapa hiasan ke jawaban asli yang saya pikir kurang.