WinAPI / C環境に慣れている人にとって、これら3つのフレームワークの長所と短所に興味があります。OOに変換されるコードは、それほど複雑ではありません。約3000行のコードで、ほとんどがコントロールです。プログラムをOOにして、将来的に他の人が保守できるようにしたいと思います。現時点ではC泥の大きなボールであり、C++OOで再コーディングしたいと思います。
それらのフレームワークのどれを使用する必要がありますか?
Visual Component Library(VCL)は、Borlandが自社製品(DelphiおよびC ++ Builder)用に開発したライブラリです。
Microsoft Foundation Class Library(MFC)は、Microsoftによって開発されたライブラリであり、基本的にはCWinAPIのC++ラッパーです。ただし、Visual C ++2005/2008/2010Expressには含まれていません。
MFCのウィキペディアの記事にあるように、Windowsテンプレートライブラリ(WTL)は、MFCの軽量な代替手段であるC++テンプレートライブラリです。ここで作成されていますが、公式のドキュメントはありません。(例、コントロール、およびユーティリティについては、このページを参照してください。)WTLはIDEと統合されておらず、製品サポートサービスによって正式にサポートされていません。
QtはクロスプラットフォームのC++フレームワークであり、3つのライセンス(Qtの特別な例外を除くGNU LGPL 2.1、GNU GPL 3.0、商用開発者ライセンス)で利用できます。クロスプラットフォームであるため、フレームワークはCWinAPIライブラリのラッパーではありません。また、さまざまなプログラミング言語のバインディングもあります。
Qtから使用されるAPIスタイルは、最新バージョンのネイティブスタイルです。以前は、ネイティブGUIをエミュレートしていました(KDEなどのQtがネイティブGUIである場合を除く)。
QtとCWinAPIの違いを理解するには長すぎず、基本的すぎる単純で完全な例はありませんが、ここでいくつかの例を見つけることができます。。シグナル(つまり、ウィジェットから発生するイベント)やスロット(つまり、イベントが発生したときに呼び出されるメソッド)の概念など、すべてのフレームワークで使用される特定の概念があると言えます。他のウィジェットの値に基づいて、ウィジェットから表示される内容を変更できます。
connect(xSlider, SIGNAL(valueChanged(int)), glWidget, SLOT(setXRotation(int)));
connect(glWidget, SIGNAL(xRotationChanged(int)), xSlider, SLOT(setValue(int)));
connect(ySlider, SIGNAL(valueChanged(int)), glWidget, SLOT(setYRotation(int)));
connect(glWidget, SIGNAL(yRotationChanged(int)), ySlider, SLOT(setValue(int)));
connect(zSlider, SIGNAL(valueChanged(int)), glWidget, SLOT(setZRotation(int)));
connect(glWidget, SIGNAL(zRotationChanged(int)), zSlider, SLOT(setValue(int)));
クロスプラットフォームアプリケーションを構築したり、さまざまなプログラミング言語で構築したりできるライブラリを探している場合は、これを選択します。Qtを取得するためのライセンスを考慮してください。
Windowsでのみ実行されるC++アプリケーションを作成する場合は、WTLも選択します。数年前は、IDEのサポートはありませんが、今では使いやすくなっています。つまり、(たとえば)UIクラスのインスタンスを作成したり、サブクラスを作成したりするためのウィザードはありません。 GUIクラスの。
MFCとWTLはどちらもWinAPIに最も近いです。これは、WinAPIの単なるOOPラッパーであるためです。これは、CコードをC++に変換する最も短い方法です。QTはより堅牢で最新のものですが、プロジェクトを完全に再設計する必要があります。WTLの使用をお勧めします。