japan.internet.comThe Internet & IT Network
Twitter
RSS
  • ニュース
  • コラム
  • リサーチ
  • ヘッドライン
  • 特集
  • ブログ
  • プレスリリース
  • 専門チャンネル
  • イベント
  • ランキング
  • ニュースメール
2009年11月22日
文字サイズ文字サイズ小文字サイズ中文字サイズ大
事業仕分けによる次世代スーパーコンピューターの開発予算削減について、どうお考えですか?
賛成
反対
どちらとも言えない
投票締切 11/30 12:00
デベロッパー2008年7月4日 10:00

Visual C++ 2008 Feature Pack: MFCの強化

海外海外internet.com発の記事
  • Post to Twitter
  • Post to Facebook
  • このエントリーを含むはてなブックマーク
  • この記事をクリップ!
  • Buzzurlにブックマーク
  • Yahoo!ブックマークに登録
  • newsing it!
  • この記事をokyuuへインポート

はじめに

 昨年Microsoftが約束したように、今度の新しいVisual C++では、ネイティブコードによる開発と、ネイティブとマネージドの世界を融合するコードの部分に重点が置かれています。

 すべての機能をC#やVisual Basic.NETなどのマネージドオンリー言語と同等に維持しても、それではVisual C++の製品としての意味がありません。マネージド機能との同等性を重視すればするほど、Visual C++という製品の本来の領域、つまりネイティブコーディングおよび相互運用コーディングからは遠くなっていきます。

 Visual C++ 2008は、Microsoftのネイティブコードへの新たな取り組みを大きく反映し、この10年で初めて、MFCを刷新してWindowsコモンコントロールライブラリをフルサポートします。単にWindowsをカバーするだけでなく、Visual C++チームはVisual C++ 2008 Feature Packもリリースし、Visual StudioおよびMicrosoft Office風ユーザーインターフェイスを持つアプリケーション開発のサポートを組み込んでいます(現在、このFeature PackはBeta版であり、ここからダウンロードできます)。このMSDN Webサイトの記事で説明されているように、MFCの更新は、MicrosoftのVisual C++チームとパートナー関係にある外部企業(BCGSoft社)が行いました。

編集部注
 バージョンは執筆当時。現在は正式版がリリースされています。
 Visual C++ 2008 Feature Pack Beta版をインストールするときは注意が必要です。インストーラにバグがあり、Visual Studio 2008の完全インストールを選択しないとインストールが終了します。また、Visual C++/Visual Studioがインストールされているオリジナルメディアを利用することもできません。このような問題を最も簡単に解決するには、ディスクドライブにVisual Studio 2008 DVDをセットするか、Visual Studioをインストールした元の場所へのネットワークアクセスが可能であることを確認します。

 Feature Pack(ダウンロードサイズは303MB)にはドキュメントが含まれていません。そのため、新しい機能について説明する2つのCHMファイルをMSDNから別途ダウンロードする必要があります(ダウンロードサイズは3MB)。

編集部注
 上記ダウンロードページは現在閉鎖されています。
 このFeature Packは、明確な2つの機能領域に分かれており、MFCの更新とTR1機能があります。TR1は、C++言語に一時的に追加される機能で、C++0xリリースでC++の新機能として正式に採用されるかどうかは未定です(なお、0xは今後10年のうちに新しい規格が採用される可能性を示すものです)。TR1の詳細については、このMSDNブログの投稿記事に記載されており、今後の記事でもさらに詳しく取り上げられる予定です。

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 MS Office 2007 Demoサンプルアプリケーション
図1 MS Office 2007 Demoサンプルアプリケーション
 図1には、いくつかの新しいユーザーインターフェイス要素がありますが、最も目立つのは、いわゆる「WOWファクター」をアプリケーションにもたらすリボンコントロールです。リボンコントロールは、ユーザー向けの多種多様な機能を非常に多く備えており、これを一から実装しようとすると膨大な手間がかかります。たとえば、リボンコントロールの実装は25種類のCPPファイルによって構成され、これらのサイズは1MBのソースコードの実に半分を占めます。このようなことから、MFCリボンを実装することがどれだけ複雑であるか、その一端を理解できます。

 既存のアプリケーションをアップグレードして、標準メニューとツールバーのUIをリボンベースのUIに移行することは、それほど困難ではありません。まず主な作業として、CMFCRibbonBarおよびCMFCRibbonApplicationButtonメンバ変数をアプリケーションのCMainFrameクラスに追加し、次に、リボンに表示する各種画像を保持するCMFCToolBarImagesメンバ変数を追加します。

 リボン上の各タブ(Microsoft Word 20007の[Home]、[Insert]、[Page Layout]タブなど)はカテゴリと呼ばれます。リボンに新しいカテゴリを追加する場合は、CMFCRibbonBar::AddCategoryメソッドを呼び出します(このメソッドは、大きなアイコンと小さなアイコンをパラメータとして利用します)。

 CMainFrameクラスに前述の新しいメンバ変数を追加するほかに、MFCによって生成されるコードのほとんどの基本クラスを、新しいスタイルのExクラスを使用するように変更する必要があります。つまり、CWinAppExCMDIFrameWndExCMDIChildWndEx、およびCSplitterWndExというクラスを、それぞれの非Exスタイルのクラスの代わりに使用するようにします。新しいExクラスは、どれも対応する非Exクラスから派生したものであるため、アプリケーションにはほとんど影響しません。

 幸いなことに、Visual C++ 2008 Feature Packをインストールすると、MFCアプリケーションウィザードも更新されるため、同ウィザードから、リボン機能をフルサポートしたOffice 2007風アプリケーションを直接作成することができます。MFCアプリケーションウィザード内では、[Application Type]が更新され、新しい視覚スタイルと色([Visual style and colors])がいくつか追加されます(図2を参照)。

図2 新しいMFCアプリケーションの視覚スタイル
図2 新しいMFCアプリケーションの視覚スタイル
 いずれかのOffice 2007視覚スタイルを使用してアプリケーションを生成した場合は、アプリケーションのリボンコントロールの上部に、Office 2007のさまざまな配色スキーマを選択できるドロップダウンメニューが配置されます(図3を参照)。

図3 Office 2007風アプリケーションの配色ドロップダウンメニュー
図3 Office 2007風アプリケーションの配色ドロップダウンメニュー
 標準メニューではなくリボンを使用するためには、アプリケーションウィザードで図4のような設定を行います。既存のアプリケーションをアップグレードしてリボンベースのユーザーインターフェイスに対応させる場合でも、新しいスケルトンアプリケーションを生成することをお勧めします。

 これは、リボンをサポートするために必要なメニュービットマップのテンプレートとして利用できるからです。アプリケーションウィザードによって生成されるリボンコントロールの例は図3で確認できます。

図4 新しいMFCアプリケーションでのリボンバーの使用
図4 新しいMFCアプリケーションでのリボンバーの使用
 リボンコントロールのほかにも、MFC Feature Packでは、Visual Studioと同様のウィンドウのドッキングもサポートしています。ドッキングの設定は比較的簡単で、次のようにドッキングマネージャへの呼び出しを行うだけで、スマートドッキングをサポートできます。

CDockingManager::SetDockingMode(DT_SMART);
 スマートドッキングを適用すると、画面内でウィンドウをドラッグしている間に、ウィンドウの移動先が視覚的に表示されます。これはVisual Studioと同じ視覚効果です(図5を参照)。

図5 スマートドッキングの操作中
図5 スマートドッキングの操作中
 Visual C++ 2008 Feature Packにより、MFCはかつてなく高いレベルに到達し、最新バージョンのMicrosoft Officeに近い外観のアプリケーションをすばやく容易に開発できるようになりました。

 オーナー描画コントロールやサポートが不十分なサードパーティ製ツールキットを苦労しながら長年使ってきた開発者にしてみれば、このような強力なユーザーインターフェイス機能がVisual C++チームの手で開発およびサポートされるというのは喜ばしいニュースであり、今後のVisual C++によるネイティブ開発の復興を確信させる出来事です。実際、Feature Packは非常に優れたソフトウェアです。

著者紹介

Nick Wienholt(Nick Wienholt)
シドニーに拠点を置く独立系Windowsおよび.NETコンサルタント。著書に『Maximizing .NET Performance』、共著に『A Programmers Introduction to C# 2.0』(いずれもApress刊)。システムレベルソフトウェアアーキテクチャおよび開発を専門とし、パフォーマンス、セキュリティ、相互運用性、およびデバッグに精通。
.NETコミュニティに精力的に参加。Sydney Deep .NET User groupの創設者の1人。Australian Developer Journal、ZDNet、Pinnacle Publishing、CodeGuru、MSDN Magazine(Australia Edition、New Zealand Edition)、およびMicrosoft Developer Networkで技術記事を執筆。SDNUGでの発表、記事、および.NETブログのアーカイブはwww.dotnetperformance.comから入手可能。
.NET分野での功績が評価され、2002〜2007年までMicrosoft MVP受賞。
関連テーマ
  • プリンター用
  • 記事を転送
  • Post to Twitter
  • Post to Facebook
  • このエントリーを含むはてなブックマーク
  • この記事をクリップ!
  • BuzzurlにブックマークBuzzurlにブックマーク
  • Yahoo!ブックマークに登録
  • newsing it!
  • この記事をokyuuへインポート
最新トップニュース
Graphic Design Forum
【Graphic Design Forum】
流動的媒体と静的媒体に関する見解(11月18日)
「IT の耳」
「IT の耳」
【書評】『Hyper-V スタートアップバイブル』――仮想化についてのすぐれた解説書(11月20日)
百式のネットビジネス研究
百式のネットビジネス研究
世界でもっともパワフルな iPod のスピーカー「Wall of Sound」(11月20日)
週刊-サイト別アクセス状況データ
週刊-サイト別アクセス状況データ
ビデオリサーチインタラクティブ調査(月間インターネットオーディエンスデータ)(11月19日)
海外ソーシャルウェブに学ぶ成功の秘訣
海外ソーシャルウェブに学ぶ成功の秘訣
ゲーム業界を襲う世界的な激震。ソーシャルゲーム急成長のインパクト(11月19日)
今さら聞けない初歩からのアクセス解析
今さら聞けない初歩からのアクセス解析
サイトリニューアル前のアクセス解析活用法(11月19日)
成約率、反応率を上げる Web 文章術
成約率、反応率を上げる Web 文章術
文章力を磨き、キャッシュを生み出す Web サイト に(11月19日)
「Webからの脅威」―その傾向と最新対策
「Webからの脅威」―その傾向と最新対策
新たな対策技術:スパムフィルタリングと E-mail レピュテーション(11月18日)
ROI向上のための戦略的WebPR
ROI向上のための戦略的WebPR
「戦略的 WebPR」のしかけ方〜WebPR の効果測定手法とは〜(11月18日)
スマートにソーシャルウェブを構築しよう
スマートにソーシャルウェブを構築しよう
社員力を生かすソーシャルメディアポリシー(11月17日)
DevX
DevX
Erlangを使った並列処理プログラムの作成(11月17日)
Copyright 2009 Japan Internet.com K.K. All Rights Reserved.http://www.internet.com/