チュートリアル : MFC を使用した新しいリボン アプリケーションの作成
更新 : 2007 年 11 月
このチュートリアルでは、MFC アプリケーション ウィザードを使用して、既定のリボンを備えたアプリケーションを作成します。次に、[カスタム] リボン カテゴリおよび [お気に入り] リボン パネルを追加してリボンを拡張し、頻繁に使用するコマンドをそのカテゴリに追加します。
前提条件
このチュートリアルを行うには、Visual C++ 2008 Feature Pack または Visual Studio 2008 Service Pack 1 をインストールする必要があります。
このチュートリアルは、読者が全般的な開発設定を使用することを指定して Visual Studio のセットアップを完了していることを前提としています。別の開発設定を使用している場合は、このチュートリアルで使用する一部の Visual Studio ウィンドウが既定で表示されないことがあります。
リボンを備えた新しい MFC アプリケーションを作成するには
MFC アプリケーション ウィザードを使用して、既定のリボンを備えた MFC アプリケーションを作成します。このウィザードを実行するには、[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。[新しいプロジェクト] ダイアログ ボックスが表示されます。
[新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] ペインで、[Visual C++] ノードを展開し、[MFC] をクリックします。次に、[テンプレート] ペインで [MFC アプリケーション] をクリックします。プロジェクトの名前 (MFCRibbonApp など) を入力し、[OK] をクリックします。MFC アプリケーション ウィザードが表示されます。
[MFC アプリケーション ウィザード] ダイアログ ボックスで、[次へ] をクリックします。[アプリケーションの種類] ペインが表示されます。
[アプリケーションの種類] ペインで、[表示スタイルと色] の [Office 2007 (青のテーマ)] を選択します。その他の設定はそのままにします。[次へ] をクリックして、[複合ドキュメント サポート] ペインを表示します。
複合ドキュメント サポートは追加しません。したがって、[なし] が選択されていることを確認します。[次へ] をクリックして、[ドキュメント テンプレート文字列] ペインを表示します。
[ドキュメント テンプレート文字列] ペインで、このアプリケーションが作成するドキュメントのファイル名拡張子 (mfcrbnapp など) を決定し、[ファイル拡張子] フィールドに入力します。[次へ] をクリックして、[データベース サポート] ペインを表示します。
このアプリケーションにはデータベース サポートを追加しません。したがって、[なし] が選択されていることを確認します。[次へ] をクリックして、[ユーザー インターフェイス機能] ペインを表示します。
[ユーザー インターフェイス機能] ペインで、[リボンを使用する] が選択されていることを確認します。[次へ] をクリックして、[高度な機能] ペインを表示します。
既定では、MFC アプリケーション ウィザードはドッキング ペインのサポートをいくつか追加します。ただし、このチュートリアルの目的はリボンについて学習することであるため、アプリケーションからこれらのオプションを削除します。[高度なフレーム ペイン] ペインで、オプションの選択をすべて解除します。[次へ] をクリックして、[生成されたクラス] ペインを表示します。
[生成されたクラス] ペインで、[完了] をクリックすると、新しい MFC アプリケーションが作成されます。
アプリケーションをビルドして実行することにより、アプリケーションが正常に作成されたことを確認します。アプリケーションをビルドするには、[ビルド] メニューの [ソリューションのビルド] をクリックします。アプリケーションが正常にビルドされたら、[デバッグ] メニューの [デバッグ開始] をクリックして、アプリケーションを実行します。
ウィザードは、[ホーム] という名前の 1 つのリボン カテゴリを持つリボンを自動的に作成します。このリボンには、[クリップボード]、[ビュー]、および [ウィンドウ] という名前の 3 つのリボン パネルが含まれています。
リボンに新しいリボン カテゴリを追加するには
プロジェクトで作成した既存のリボンは、MainFrm.h ヘッダーにあります。このヘッダーには、次のコード行が含まれています。
CMFCRibbonBar m_wndRibbonBar;
リボンにカテゴリを追加するには、CMFCRibbonBar::AddCategory メソッドを呼び出します。このメソッドには、3 つのパラメータが必要です。1 つ目のパラメータは、カテゴリの名前です。これは、リボン内のカテゴリのタブに表示される値です。アプリケーションをローカライズしやすくするために、この値をアプリケーション リソースのストリング テーブルに追加します。
この操作を行うには、[リソース ビュー] をクリックし、[MFCRibbonApp] および [MFCRibbonApp.rc] ノードを展開して、[ストリング テーブル] ノードを展開します。[リソース ビュー] タブが表示されない場合は、[表示] メニュー、[その他のウィンドウ] の順にクリックし、最後に [リソース ビュー] を選択して、このタブを開きます。次に、[ストリング テーブル] をダブルクリックします。表示されるウィンドウの任意の場所を右クリックし、[新しい文字列] を選択します。これで IDS_STRINGnnn のような値を持つ新しいエントリが作成されます。「カスタム」というラベルのカテゴリを作成するので、[ID] フィールドをクリックして、文字列を 「IDS_RIBBON_CUSTOM」に変更します。次に、[キャプション] フィールドをクリックして「カスタム」と入力します。
CMFCRibbonBar::AddCategory メソッドの次の 2 つのパラメータは、リボン要素のアイコンとして使用されるビットマップです。カスタム ビットマップの作成については、このチュートリアルでは説明しません。したがって、ウィザードで作成したビットマップを再利用します。2 番目のパラメータは、リボンに表示される小さいビットマップのリソース ID です。小さいビットマップは 16 × 16 ピクセルです。これらのビットマップには、IDB_FILESMALL リソース ID でアクセスされるビットマップを選択します。3 番目のパラメータは、リボンに表示される大きいビットマップのリソース ID です。大きいビットマップは 32 × 32 ピクセルです。これらのビットマップには、IDB_FILELARGE リソース ID でアクセスされるビットマップを選択します。
MainFrm.cpp ファイルを開いて、CMainFrame::OnCreate メソッドを探します。次の 2 行のコードが見つかります。
m_wndRibbonBar.Create(this); InitializeRibbon();
CMFCRibbonBar::Create メソッドが、リボンに対する基になる Windows コントロールを作成し、開発者は CMainFrame::InitializeRibbon メソッド内でリボンをカスタマイズできます。
CMainFrame::InitializeRibbon メソッドの下部に移動します。リボン カテゴリを作成するには、次のコードを追加します。
// Add "Custom" category: strTemp.LoadString(IDS_RIBBON_CUSTOM); CMFCRibbonCategory* pCategoryCustom = m_wndRibbonBar.AddCategory(strTemp, IDB_FILESMALL, IDB_FILELARGE);
アプリケーションをビルドして実行することにより、リボン カテゴリが正常に作成されたことを確認します。アプリケーションをビルドするには、[ビルド] メニューの [ソリューションのビルド] をクリックします。アプリケーションが正常にビルドされたら、[デバッグ] メニューの [デバッグ開始] をクリックして、アプリケーションを実行します。これで、リボンに [カスタム] タブが表示されます。
リボン カテゴリにリボン パネルを追加するには
論理的に相互に関連する項目をリボン パネル内に配置することで、それらの項目をグループ化できます。たとえば、このアプリケーションの [ホーム] タブの [切り取り]、[コピー]、および [貼り付け] の各コマンドをすべて [クリップボード] パネルに配置します。
[カスタム] カテゴリにリボン パネルを追加するには、CMFCRibbonCategory::AddPanel メソッドを呼び出します。
このメソッドには、パネルの名前を指定する必須パラメータを 1 つ設定できます。アプリケーションをローカライズしやすくするために、この値をストリング テーブルに追加します。この操作を行うには、[リソース ビュー] をクリックし、[MFCRibbonApp] および [MFCRibbonApp.rc] ノードを展開して、[ストリング テーブル] ノードを展開します。次に、[ストリング テーブル] をダブルクリックします。表示されるウィンドウの任意の場所を右クリックし、[新しい文字列] を選択します。これで IDS_STRINGnnn のような値を持つ新しいエントリが作成されます。「お気に入り」というラベルのカテゴリを作成するので、[ID] フィールドをクリックして、文字列を 「IDS_RIBBON_FAVORITES」に変更します。次に、[キャプション] フィールドをクリックして「お気に入り」と入力します。
AddPanel メソッドにアイコンのリソース ID を設定することもできます。このアイコンは、リボン パネルがクイック アクセス ツール バーに追加されると表示されますが、リボン パネル自体には表示されません。既に、CMFCToolBarImages クラスの m_PanelImages という名前のインスタンスがウィザードによって作成されています。コードには、このビットマップのいずれかのアイコンを使用します。イメージを抽出するには、CMFCToolBarImages::ExtractIcon メソッドを呼び出します。
パネルに [お気に入り] リボン カテゴリを追加するには、前に CMainFrame::InitializeRibbon に追加したコードの下に、次のコードを追加します。
// Create "Favorites" panel: strTemp.LoadString(IDS_RIBBON_FAVORITES); CMFCRibbonPanel* pPanelFavorites = pCategoryCustom->AddPanel(strTemp, m_PanelImages.ExtractIcon(15));
アプリケーションをビルドして実行することにより、リボン パネルが正常に作成されたことを確認します。アプリケーションをビルドするには、[ビルド] メニューの [ソリューションのビルド] をクリックします。アプリケーションが正常にビルドされたら、[デバッグ] メニューの [デバッグ開始] をクリックして、アプリケーションを実行します。これで、リボンの [カスタム] タブに [お気に入り] パネルが表示されます。
リボン パネルに要素を追加するには
前の手順で作成したパネルに要素を追加するには、CMFCRibbonPanel::Add メソッドを呼び出します。このメソッドは、パラメータとして CMFCRibbonBaseElement クラス クラスのインスタンスを受け取ります。CMFCRibbonBaseElement は、パネルに追加できるすべての要素 (ボタン、チェック ボックス、コンボ ボックスなど) の基本クラスです。
最初に、[印刷] ボタンを追加します。[印刷] ボタンには、既定のプリンタを使用して印刷する [クイック印刷] コマンドを含むサブメニューを含めます。この両方のコマンドは、アプリケーション メニューにあるため、既にこのアプリケーション用に定義されています。
[クイック印刷] ボタンを作成するには、前に CMainFrame::InitializeRibbon に追加したコードの下に、次のコードを追加します。
// Create "Quick Print" button: strTemp.LoadString(IDS_RIBBON_PRINT_QUICK); CMFCRibbonButton* pBtnFavPrintQuick = new CMFCRibbonButton(ID_FILE_PRINT_DIRECT, strTemp, 7);
IDS_RIBBON_PRINT_QUICK 文字列は、ID_FILE_PRINT_DIRECT コマンドと同様に、既にストリング テーブルで定義されています。CMFCRibbonButton コンストラクタの 3 番目のパラメータは、コマンドの横に表示される小さいアイコンです。この場合、[クイック印刷] アイコンは IDB_FILESMALL リソース ID の 7 番目のビットマップです。
次に、[印刷] ボタンを作成するために、次のコードを追加します。CMFCRibbonButton::AddSubItem メソッドを使用して、[印刷] ボタンのサブアイテムとして [クイック印刷] ボタンを追加します。
// Create "Print" button with "Quick Print" as subitem: strTemp.LoadString(IDS_RIBBON_PRINT); CMFCRibbonButton* pBtnFavPrint = new CMFCRibbonButton(ID_FILE_PRINT, strTemp, 6); pBtnFavPrint->AddSubItem(pBtnFavPrintQuick);
IDS_RIBBON_PRINT 文字列は、ID_FILE_PRINT コマンドと同様に、既にストリング テーブルで定義されています。コンストラクタの 3 番目のパラメータは、コマンドの横に表示される小さいアイコンです。この場合、[印刷] アイコンは IDB_FILESMALL リソース ID の 6 番目のビットマップです。
次に、[お気に入り] パネルに [印刷] ボタンを追加するために、次のコードを追加します。
// Add "Print" button to "Favorites" panel: pPanelFavorites->Add(pBtnFavPrint);
[お気に入り] パネルに追加する 2 つ目の項目は、コンボ ボックスです。このチュートリアルが複雑にならないように、コマンドにはコンボ ボックスの項目を関連付けません。そして、リボンにコンボ ボックスを追加する方法だけを示します。
CMFCRibbonComboBox コンストラクタは、5 つのパラメータを受け取ります。最初のパラメータは、ユーザーがコンボ ボックスで項目を選択するときに実行されるアクションのコマンド ID です。2 番目のパラメータは、コンボ ボックスの項目が編集可能かどうかを指定します。このアプリケーションでは、FALSE を指定します。3 番目のパラメータは、コンボ ボックスの幅です。コンボ ボックスに既定の幅 120 ピクセルが使用されるよう、-1 を指定します。4 番目のパラメータは、コンボ ボックスのラベルです。このアプリケーションでは、ラベルを指定しません。最後のパラメータは、コンボ ボックスの横に表示するイメージです。このアプリケーションでは、イメージを指定しません。コンボ ボックスを作成するには、前に CMainFrame::InitializeRibbon に追加したコードの下に、次のコードを追加します。
// Create a simple combo box that has two entries: CMFCRibbonComboBox *pComboSimple = new CMFCRibbonComboBox(-1, FALSE, -1, 0, -1);
次に、コンボ ボックスに 2 つの値を追加します。簡潔にするために、これらの値のラベルを "Hi!" および "Hello!" にします。
// Add two items to the combo box and select the first item in the list: pComboSimple->AddItem(_T("Hi!")); pComboSimple->AddItem(_T("Hello!")); pComboSimple->SelectItem(0);
これで、CMFCRibbonPanel::Add を呼び出して、パネルにコンボ ボックスを追加できます。
// Add combo button to "Favorites" panel: pPanelFavorites->Add(pComboSimple);
アプリケーションをビルドして実行し、リボン パネルにボタンとコンボ ボックスが追加されたことを確認します。アプリケーションをビルドするには、[ビルド] メニューの [ソリューションのビルド] をクリックします。アプリケーションが正常にビルドされたら、[デバッグ] メニューの [デバッグ開始] をクリックして、アプリケーションを実行します。これで、リボンの [カスタム] タブの [お気に入り] パネルに [印刷] ボタンとコンボ ボックスが表示されます。
次の手順
[お気に入り] パネルに別のリボン要素 (CMFCRibbonCheckBox、CMFCLinkCtrl など) を追加してみてください。
Visual C++ 2008 Feature Pack に関するチュートリアルについては、「チュートリアル (MFC Feature Pack)」を参照してください。
Visual C++ 2008 Feature Pack のさまざまな特徴を取り上げた詳細なサンプルについては、「サンプル (MFC Feature Pack)」を参照してください。