MFCとATLの基本的な違いは何ですか?
それらを「通常の」GUIプログラム(COMなし、ActiveXなし、派手なものなし)にのみ使用していると仮定すると、ATLとMFCの基本的な違いは何ですか? 私はウェブでいくつかの検索を行いましたが、結局のところ、どの回答も実際には私の質問に答えていません。 http://msdn.microsoft.com/en-us/library/bk8ytxz5(v=vs.80).aspx: 「ATLは、C ++でCOMコンポーネントを作成し、小さなフットプリントを維持するための高速で簡単な方法です。MFCが自動的に提供するすべての組み込み機能が必要ない場合は、ATLを使用してコントロールを作成します。」 次の理由により、私の質問には実際には回答しません。 COMを使用していません。 これはMFC が高速でないことを意味しますか?なぜ、どのように? 「MFCを使用すると、完全なアプリケーション、ActiveXコントロール、およびアクティブドキュメントを作成できます。既にMFCでコントロールを作成している場合は、MFCでの開発を継続することをお勧めします。新しいコントロールを作成するとき、必要がない場合はATLの使用を検討してくださいMFCのすべての組み込み機能。」 また、私の質問には答えません。 そもそも、ActiveX が何なのか、私にもよくわかりません。 マイクロソフトがMFCの使用を推奨していないように見えますが、理由がわかりません。 ATLが提供しないMFCの「組み込み機能」とは正確には何ですか? 一般的に、これは私の疑問に答えません。なぜなら、それは欠点とその背後にある理由を説明しないからです。 直接的または間接的に、すべてが前のページにリンクしているように見えるためです。 新しいC ++プロジェクトでATL、MFC、Win32、CLRのどちらを使用するかをどのように決定しますか? 「ATL&MFCは間を決めてややトリッキーです。 [[いいえ冗談です!]] 私はあなたを参照してくださいしたいMSDNのページそれらの間で決定するために選択するために。」 明らかに、これは私の質問に答えません。:) http://www.codeguru.com/forum/archive/index.php/t-64778.html 等 私が現在観察しているもの(過去2日間、両方を学習しようとしている間): ATLはテンプレート、またはコンパイル時のポリモーフィズムに基づいています。 ATLメソッドは非仮想である傾向があり、参照を返す傾向があります。 MFCは仮想メソッド、または実行時のポリモーフィズムに基づいています。 MFCメソッドは仮想である傾向があり、ポインターを返す傾向があります。 しかし、それらの間にアーキテクチャ上の違いはないようです: どちらもメッセージマップを使用します(BEGIN_MSG_MAP対BEGIN_MESSAGE_MAP...大したこと) どちらもWin32メソッドをクラスにラップします どちらも、同様のクラスの持っているように思わCWnd対をCWindow しかし、コンパイル時と実行時の側面以外に実際の違いがない場合、なぜ両方が存在するのでしょうか。それらの1つで十分ではありませんか? ここで何が欠けていますか?