MFCの更新
1998年のVisual C++ 6のリリース以後、MFCの勢いは下り坂になりました。MFCには、Windowsオペレーティングシステムの一部としてリリースされるコントロールの機能が含まれていますが、Visual C++ 6以降にリリースされたMFCには、.NETが目前に控えていたため、これらの機能は含まれていません。
以前の記事で述べたとおり、MFCは、Visual C++ 2008によって大幅に更新されました。Feature Packでも引き続きMFCが更新され、Vistaオペレーティングシステム上で動作したり、Internet Explorer 7やOffice 2007などのアプリケーションと併用できるアプリケーションを容易に開発できるようになっています。
Feature Packを使用して作成したMFCアプリケーションの長所を手っ取り早く知るために、サンプルを実行してみましょう。旧世代のMFCとはまったく異なることがはっきりとわかります。
図1に、Feature Packに付属するMSOffice2007Demoサンプルアプリケーションを示します。一見すると、このアプリケーションはOffice 2007の一部であるかのように見えます。これがサードパーティ製コントロールも使っていない、何百行にもわたるオーナー描画GUIコーディングも行っていないMFCアプリケーションであるという事実は、少し前まで兄弟分のWindows FormsやWPFに大きく後れを取っていたMFCの状況を考えると、まさに驚くべきことです。
図1には、いくつかの新しいユーザーインターフェイス要素がありますが、最も目立つのは、いわゆる「WOWファクター」をアプリケーションにもたらすリボンコントロールです。リボンコントロールは、ユーザー向けの多種多様な機能を非常に多く備えており、これを一から実装しようとすると膨大な手間がかかります。たとえば、リボンコントロールの実装は25種類のCPPファイルによって構成され、これらのサイズは1MBのソースコードの実に半分を占めます。このようなことから、MFCリボンを実装することがどれだけ複雑であるか、その一端を理解できます。
既存のアプリケーションをアップグレードして、標準メニューとツールバーのUIをリボンベースのUIに移行することは、それほど困難ではありません。まず主な作業として、CMFCRibbonBar
およびCMFCRibbonApplicationButton
メンバ変数をアプリケーションのCMainFrame
クラスに追加し、次に、リボンに表示する各種画像を保持するCMFCToolBarImages
メンバ変数を追加します。
リボン上の各タブ(Microsoft Word 20007の[Home]、[Insert]、[Page Layout]タブなど)はカテゴリと呼ばれます。リボンに新しいカテゴリを追加する場合は、CMFCRibbonBar::AddCategory
メソッドを呼び出します(このメソッドは、大きなアイコンと小さなアイコンをパラメータとして利用します)。
CMainFrame
クラスに前述の新しいメンバ変数を追加するほかに、MFCによって生成されるコードのほとんどの基本クラスを、新しいスタイルのExクラスを使用するように変更する必要があります。つまり、CWinAppEx
、CMDIFrameWndEx
、CMDIChildWndEx
、およびCSplitterWndEx
というクラスを、それぞれの非Exスタイルのクラスの代わりに使用するようにします。新しいExクラスは、どれも対応する非Exクラスから派生したものであるため、アプリケーションにはほとんど影響しません。
幸いなことに、Visual C++ 2008 Feature Packをインストールすると、MFCアプリケーションウィザードも更新されるため、同ウィザードから、リボン機能をフルサポートしたOffice 2007風アプリケーションを直接作成することができます。MFCアプリケーションウィザード内では、[Application Type]が更新され、新しい視覚スタイルと色([Visual style and colors])がいくつか追加されます(図2を参照)。
いずれかのOffice 2007視覚スタイルを使用してアプリケーションを生成した場合は、アプリケーションのリボンコントロールの上部に、Office 2007のさまざまな配色スキーマを選択できるドロップダウンメニューが配置されます(図3を参照)。
標準メニューではなくリボンを使用するためには、アプリケーションウィザードで図4のような設定を行います。既存のアプリケーションをアップグレードしてリボンベースのユーザーインターフェイスに対応させる場合でも、新しいスケルトンアプリケーションを生成することをお勧めします。
これは、リボンをサポートするために必要なメニュービットマップのテンプレートとして利用できるからです。アプリケーションウィザードによって生成されるリボンコントロールの例は図3で確認できます。
リボンコントロールのほかにも、MFC Feature Packでは、Visual Studioと同様のウィンドウのドッキングもサポートしています。ドッキングの設定は比較的簡単で、次のようにドッキングマネージャへの呼び出しを行うだけで、スマートドッキングをサポートできます。
CDockingManager::SetDockingMode(DT_SMART);
スマートドッキングを適用すると、画面内でウィンドウをドラッグしている間に、ウィンドウの移動先が視覚的に表示されます。これはVisual Studioと同じ視覚効果です(図5を参照)。
Visual C++ 2008 Feature Packにより、MFCはかつてなく高いレベルに到達し、最新バージョンのMicrosoft Officeに近い外観のアプリケーションをすばやく容易に開発できるようになりました。
オーナー描画コントロールやサポートが不十分なサードパーティ製ツールキットを苦労しながら長年使ってきた開発者にしてみれば、このような強力なユーザーインターフェイス機能がVisual C++チームの手で開発およびサポートされるというのは喜ばしいニュースであり、今後のVisual C++によるネイティブ開発の復興を確信させる出来事です。実際、Feature Packは非常に優れたソフトウェアです。