Tôi nghĩ câu trả lời cho câu hỏi của bạn chủ yếu là lịch sử, nếu bạn nhìn lại cách hai thư viện bắt nguồn và phát triển qua thời gian.
Câu trả lời ngắn gọn là, nếu bạn không làm bất cứ điều gì "lạ mắt", hãy sử dụng ATL. Nó tuyệt vời cho các giao diện người dùng đơn giản với COM được đưa vào.
Câu trả lời dài: MFC được xây dựng vào đầu những năm 90 để thử ngôn ngữ mới này có tên là C ++ và áp dụng nó cho Windows. Nó làm cho Office giống như các tính năng có sẵn cho cộng đồng phát triển khi hệ điều hành chưa có chúng.
[Chỉnh sửa bổ sung: Tôi không làm việc tại Microsoft, vì vậy tôi không biết liệu Office có bao giờ được xây dựng trên MFC hay không, nhưng tôi nghĩ câu trả lời là không. Trở lại Win 3.1, Win 95 days, nhóm Office UI sẽ phát minh ra các điều khiển mới, đóng gói chúng trong thư viện, sau đó nhóm Windows và MFC sẽ kết hợp các trình bao bọc và API vào các điều khiển đó với các khối có thể phân phối lại. Tôi đoán rằng có một chút cộng tác và chia sẻ mã giữa các nhóm đó. Cuối cùng những điều khiển đó sẽ đưa nó vào hệ điều hành cơ bản trong các gói dịch vụ hoặc phiên bản Windows tiếp theo. Mô hình này tiếp tục với Ruy-băng Office đã được thêm vào Windows như một thành phần bổ trợ sau khi Office xuất xưởng và hiện là một phần của Hệ điều hành Windows.]
Vào thời điểm đó, thư viện còn khá sơ khai, cả vì ngôn ngữ C ++ và trình biên dịch đều mới, và Microsoft đã xây dựng nó theo thời gian khi Office phát triển.
Vì lịch sử này, MFC:
- Có một thiết kế khá vụng về. Nó bắt đầu như một trình bao bọc nhẹ xung quanh API Windows, nhưng đã phát triển. Có một loạt 'tính năng' nhỏ đã phải được phát minh vì trình biên dịch và ngôn ngữ không hỗ trợ chúng. Không có khuôn mẫu, họ phát minh ra lớp chuỗi, họ phát minh ra lớp danh sách, họ thiết kế nhận dạng kiểu thời gian chạy của riêng mình, v.v.
- Gói gọn 20 năm phát triển của Office và Windows, trong đó bao gồm toàn bộ những thứ mà bạn có thể sẽ không bao giờ sử dụng: Giao diện một và nhiều tài liệu, DDE, COM, COM +, DCOM, Liên kết và Nhúng tài liệu (vì vậy bạn có thể nhúng một tài liệu word vào ứng dụng của bạn nếu bạn muốn), điều khiển ActiveX (sự phát triển của việc nhúng đối tượng cho web!), Lưu trữ tài liệu có cấu trúc, Tuần tự hóa và tạo phiên bản, Tự động hóa (từ những năm đầu VBA) và tất nhiên là MVC. Các phiên bản mới nhất có hỗ trợ gắn cửa sổ kiểu Visual Studio và dải băng Office. Về cơ bản, mọi công nghệ của Redmond trong 20 năm đều ở đâu đó. Nó chỉ là KHỔNG LỒ!
- Có rất nhiều lỗi nhỏ, lỗi, cách giải quyết, giả định, hỗ trợ cho những thứ vẫn còn đó mà bạn sẽ không bao giờ sử dụng và chúng gây ra vấn đề. Bạn cần phải quen thuộc với việc triển khai nhiều lớp và cách chúng tương tác để sử dụng nó trong một dự án quy mô vừa phải. Chuyển sang mã nguồn MFC trong quá trình gỡ lỗi là phổ biến. Việc tìm thấy một ghi chú công nghệ 15 năm tuổi trên một con trỏ nào đó không có giá trị gây ra sự cố vẫn xảy ra. Các giả định về việc khởi tạo nội dung nhúng tài liệu cổ có thể ảnh hưởng đến ứng dụng của bạn theo những cách kỳ lạ. Không có cái gì gọi là trừu tượng trong MFC, bạn cần phải làm việc với những điều kỳ quặc và nội bộ của nó hàng ngày, nó không che giấu bất cứ điều gì. Và đừng giúp tôi bắt đầu với trình hướng dẫn lớp học.
ATL được phát minh khi ngôn ngữ C ++ phát triển và các mẫu đã ra đời. ATL là một giới thiệu về cách sử dụng các mẫu để tránh các vấn đề về thời gian chạy của thư viện MFC:
- Bản đồ thư: Vì chúng dựa trên khuôn mẫu, các loại sẽ được kiểm tra và nếu bạn làm hỏng chức năng liên kết, nó sẽ không được xây dựng. Trong MFC, bản đồ tin nhắn dựa trên macro và giới hạn thời gian chạy. Điều này có thể gây ra các lỗi kỳ lạ, thông báo được chuyển đến cửa sổ sai, sự cố nếu bạn có chức năng hoặc macro được xác định không chính xác hoặc chỉ đơn giản là không hoạt động vì một cái gì đó không được kết nối đúng. Khó gỡ lỗi hơn nhiều và dễ bị hỏng hơn nếu không để ý.
- COM / Automation: Tương tự như bản đồ tin nhắn, COM ban đầu bị ràng buộc về thời gian chạy bằng cách sử dụng Macro, đòi hỏi nhiều lỗi xử lý và gây ra các vấn đề kỳ lạ. ATL đã làm cho nó dựa trên khuôn mẫu, biên dịch có giới hạn thời gian và nhiều, dễ dàng hơn để xử lý.
[Chỉnh sửa Embellishment: Vào thời điểm ATL được tạo ra, bản đồ kỹ thuật của Microsoft chủ yếu tập trung vào 'Quản lý tài liệu'. Apple đã giết họ trong lĩnh vực kinh doanh xuất bản máy tính để bàn. Office 'Liên kết và Nhúng Tài liệu' là một thành phần chính để nâng cao các tính năng 'Quản lý Tài liệu' của Office để cạnh tranh trong không gian này. COM là công nghệ cốt lõi được phát minh để tích hợp ứng dụng và API nhúng tài liệu dựa trên COM. MFC rất khó sử dụng cho trường hợp sử dụng này. ATL là một giải pháp tốt để làm cho công nghệ cụ thể này dễ dàng hơn để bên thứ 3 triển khai COM và sử dụng các tính năng nhúng tài liệu.]
Những cải tiến nhỏ này làm cho ATL dễ dàng hơn rất nhiều đối với một ứng dụng đơn giản không cần tất cả các văn phòng như các tính năng của MFC. Một cái gì đó với giao diện người dùng đơn giản và một số tự động hóa Office được đưa vào. Nó nhỏ, nhanh, biên dịch có giới hạn thời gian giúp bạn tiết kiệm nhiều thời gian và đau đầu. MFC có một thư viện khổng lồ về các lớp có thể phức tạp và khó làm việc.
Thật không may, ATL bị đình trệ. Nó có các trình bao bọc cho hỗ trợ API và COM của windows, và sau đó nó không bao giờ thực sự vượt ra ngoài điều đó. Khi Web phát triển, tất cả những thứ này đã bị lãng quên như một tin cũ.
[Chỉnh sửa Cải tạo: Microsoft nhận ra rằng 'Internet Thing' này sẽ rất lớn. Lộ trình kỹ thuật của họ đã thay đổi đáng kể để tập trung vào Internet Explorer, Windows Server, IIS, ASP, SQL Server, COM / DCOM trong Máy chủ giao dịch phân tán. Vì vậy, Liên kết và Nhúng tài liệu không còn là ưu tiên cao.]
Dấu chân khổng lồ của MFC khiến họ không thể đổ được, vì vậy nó vẫn phát triển chậm. Các mẫu đã được đưa trở lại thư viện, cũng như các cải tiến về ngôn ngữ và API khác. (Tôi đã không nghe nói về WTL cho đến khi tôi nhìn thấy câu hỏi này. :)
Cuối cùng, việc sử dụng cái nào chỉ đơn giản là vấn đề sở thích. Phần lớn các tính năng bạn cần nằm trong API hệ điều hành cơ sở, bạn có thể gọi trực tiếp từ một trong hai thư viện, nếu không có trình bao bọc phù hợp trong thư viện.
Chỉ 2 xu của tôi dựa trên việc sử dụng MFC trong nhiều năm, và bây giờ tôi sử dụng nó hàng ngày. Tôi đã thử ATL khi nó được phát hành lần đầu tiên trên một số dự án trong vài năm. Đó là một luồng không khí trong lành trong những ngày đó, nhưng chưa bao giờ thực sự đi đến đâu. Và rồi Web xuất hiện và tôi quên hết nó.
Chỉnh sửa: Câu trả lời này có tuổi thọ đáng ngạc nhiên. Vì nó liên tục xuất hiện trong trang tràn ngăn xếp của tôi, tôi nghĩ rằng tôi sẽ thêm một số chỉnh sửa cho câu trả lời ban đầu mà tôi nghĩ là thiếu.