次の方法で共有


チュートリアル: MFC Scribble アプリケーションの更新 (パート 1)

このチュートリアルでは、リボン ユーザー インターフェイスを使用するように既存の MFC アプリケーションを変更する方法について説明します。 Visual Studio では、Office 2007 リボンと Windows 7 のシーニック リボンの両方がサポートされています。 リボン ユーザー インターフェイスの詳細については、「 リボン」を参照してください。

このチュートリアルでは、マウスを使用して線画を作成できる従来の Scribble 1.0 MFC サンプルを変更します。 このチュートリアルのこの部分では、リボン バーが表示されるように Scribble サンプルを変更する方法を示します。 パート 2 では、リボン バーにボタンを追加します。

[前提条件]

Scribble 1.0 MFC サンプル。 Visual Studio 2017 以降への変換のヘルプについては、「 移植ガイド: MFC Scribble」を参照してください。

セクション

このチュートリアルのこの部分には、次のセクションがあります。

基底クラスの置き換え

メニューをサポートするアプリケーションをリボンをサポートするアプリケーションに変換するには、更新された基底クラスからアプリケーション、フレーム ウィンドウ、およびツール バー クラスを派生させる必要があります。 (元の Scribble サンプルは変更しないことをお勧めします。代わりに、Scribble プロジェクトをクリーンアップし、別のディレクトリにコピーしてから、コピーを変更します)。

Scribble アプリケーションの基底クラスを置き換えるには

  1. scribble.cppで、CScribbleApp::InitInstanceに AfxOleInit の呼び出しが含まれていることを確認します。

  2. pch.h ファイル (Visual Studio 2017 以前の stdafx.h) に次のコードを追加します。

    #include <afxcontrolbars.h>
    
  3. scribble.h で、CWinAppEx クラスから派生するように、CScribbleApp クラスの定義を変更します。

    class CScribbleApp: public CWinAppEx
    
  4. Scribble 1.0 は、Windows アプリケーションが初期化 (.ini) ファイルを使用してユーザー設定データを保存したときに記述されました。 初期化ファイルの代わりに、レジストリにユーザー設定を格納するように Scribble を変更します。 レジストリ キーとベースを設定するには、LoadStdProfileSettings() ステートメントの後のCScribbleApp::InitInstanceに次のコードを入力します。

    SetRegistryKey(_T("MFCNext\\Samples\\Scribble2"));
    SetRegistryBase(_T("Settings"));
    
  5. マルチ ドキュメント インターフェイス (MDI) アプリケーションのメイン フレームは、 CMDIFrameWnd クラスから派生しなくなりました。 代わりに、 CMDIFrameWndEx クラスから派生します。

    mainfrm.h ファイルとmainfrm.cpp ファイルで、 CMDIFrameWnd へのすべての参照を CMDIFrameWndExに置き換えます。

  6. childfrm.h ファイルとchildfrm.cpp ファイルで、 CMDIChildWndCMDIChildWndEx に置き換えます。

    childfrm 内。 h ファイル、 CSplitterWndCSplitterWndExに置き換えます。

  7. 新しい MFC クラスを使用するようにツール バーとステータス バーを変更します。

    mainfrm.h ファイル内:

    1. CToolBarCMFCToolBarに置き換えます。

    2. CStatusBarCMFCStatusBarに置き換えます。

  8. mainfrm.cpp ファイルで次の手順を実行します。

    1. m_wndToolBar.SetBarStylem_wndToolBar.SetPaneStyle に置き換えます。

    2. m_wndToolBar.GetBarStylem_wndToolBar.GetPaneStyle に置き換えます。

    3. DockControlBar(&m_wndToolBar)DockPane(&m_wndToolBar) に置き換えます。

  9. ipframe.cpp ファイルで、次の 3 行のコードをコメント アウトします。

    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    pWndFrame->EnableDocking(CBRS_ALIGN_ANY);
    pWndFrame->DockPane(&m_wndToolBar);
    
  10. 変更を保存し、アプリケーションをビルドして実行します。

プロジェクトへのビットマップの追加

このチュートリアルの次の 4 つの手順では、ビットマップ リソースが必要です。 適切なビットマップは、さまざまな方法で取得できます。

  • リソース エディターを使用して、独自のビットマップを作成します。 または、リソース エディターを使用して、Visual Studio に含まれており、 Visual Studio イメージ ライブラリからダウンロードできるポータブル ネットワーク グラフィックス (.png) イメージからビットマップをアセンブルします。

    ただし、 リボン のユーザー インターフェイスでは、特定のビットマップで透明なイメージがサポートされている必要があります。 透明ビットマップは 32 ビットピクセルを使用します。24 ビットでは色の赤、緑、青の各成分を指定し、8 ビットは色の透明度を指定する アルファ チャネル を定義します。 現在のリソース エディターは表示できますが、32 ビット ピクセルのビットマップは変更できません。 そのため、透過的なビットマップを操作するには、リソース エディターの代わりに外部イメージ エディターを使用します。

  • 別のアプリケーションからプロジェクトに適切なリソース ファイルをコピーし、そのファイルからビットマップをインポートします。

このチュートリアルでは、「 チュートリアル: MFC を使用したリボン アプリケーションの作成」で作成した例からリソース ファイルをコピーします。

プロジェクトにビットマップを追加するには

  1. エクスプローラーを使用して、リボンの例の resources ディレクトリ (res) から Scribble プロジェクトのリソース ディレクトリ (res) に次の .bmp ファイルをコピーします。

    1. main.bmp を Scribble プロジェクトにコピーします。

    2. filesmall.bmp と filelarge.bmp を Scribble プロジェクトにコピーします。

    3. filelarge.bmp ファイルと filesmall.bmp ファイルの新しいコピーを作成しますが、そのコピーをリボンの例に保存します。 コピー homesmall.bmp および homelarge.bmp の名前を変更し、そのコピーを Scribble プロジェクトに移動します。

    4. toolbar.bmp ファイルのコピーを作成しますが、コピーをリボンの例に保存します。 コピー panelicons.bmp の名前を変更し、そのコピーを Scribble プロジェクトに移動します。

  2. MFC アプリケーションのビットマップをインポートします。 リソース ビュー、scribble.rc ノードをダブルクリックし、[ビットマップ] ノードをダブルクリックして、[リソースの追加] をクリックします。 表示されたダイアログ ボックスで、[ インポート] をクリックします。 res ディレクトリを参照し、main.bmp ファイルを選択して、[開く] をクリックします。

    main.bmp ビットマップには、26 x 26 のイメージが含まれています。 ビットマップの ID を IDB_RIBBON_MAINに変更します。

  3. [アプリケーション] ボタンにアタッチされているファイル メニューのビットマップをインポートします。

    1. 11 個の 16 x 16 (16 x 176) イメージを含む filesmall.bmp ファイルをインポートします。 ビットマップの ID を IDB_RIBBON_FILESMALLに変更します。

    最初の 8 つの 16 x 16 イメージ (16 x 128) のみが必要であるため、必要に応じて、このビットマップの右側の幅を 176 から 128 までトリミングできます。

    1. 9 つの 32 x 32 (32 x 288) イメージを含む filelarge.bmpをインポートします。 ビットマップの ID を IDB_RIBBON_FILELARGEに変更します。
  4. リボンのカテゴリとパネルのビットマップをインポートします。 リボン バーの各タブはカテゴリであり、テキスト ラベルとオプションの画像で構成されます。

    1. homesmall.bmp ビットマップをインポートします。このビットマップには、小さなボタン ビットマップ用の 11 個の 16 x 16 イメージが含まれています。 ビットマップの ID を IDB_RIBBON_HOMESMALLに変更します。

    2. homelarge.bmp ビットマップをインポートします。このビットマップには、大きなボタン ビットマップ用の 9 個の 32 x 32 イメージが含まれています。 ビットマップの ID を IDB_RIBBON_HOMELARGEに変更します。

  5. サイズ変更されたリボン パネルのビットマップをインポートします。 これらのビットマップまたはパネル アイコンは、リボンが小さすぎてパネル全体を表示しない場合、サイズ変更操作の後に使用されます。

    1. 8 つの 16 x 16 イメージを含む panelicons.bmp ビットマップをインポートします。 ビットマップ エディター[プロパティ] ウィンドウで、ビットマップの幅を 64 (16 x 64) に調整します。 ビットマップの ID を IDB_PANEL_ICONSに変更します。

    最初の 4 つの 16 x 16 イメージ (16 x 64) のみが必要であるため、必要に応じて、このビットマップの右側の幅を 128 から 64 までトリミングできます。

リボン リソースをプロジェクトに追加する

メニューを使用するアプリケーションをリボンを使用するアプリケーションに変換する場合、既存のメニューを削除または無効にする必要はありません。 リボン リソースを作成し、リボン ボタンを追加し、新しいボタンを既存のメニュー項目に関連付けるだけです。 メニューは表示されなくなりましたが、リボン バーからのメッセージはメニューにルーティングされ、メニューのショートカットは引き続き機能します。

リボンは、リボンの左上にある大きなボタンである [アプリケーション ] ボタンと、1 つ以上のカテゴリ タブで構成されます。 各カテゴリ タブには、リボン ボタンとコントロールのコンテナーとして機能する 1 つ以上のパネルが含まれています。 次の手順では、リボン リソースを作成し、[ アプリケーション ] ボタンをカスタマイズする方法を示します。

リボン リソースをプロジェクトに追加するには

  1. ソリューション エクスプローラーで Scribble プロジェクトを選択した状態で、[プロジェクト] メニューの [リソースの追加] をクリックします。

  2. [ リソースの追加 ] ダイアログ ボックスで、[ リボン ] を選択し、[ 新規] をクリックします。

    Visual Studio によってリボン リソースが作成され、デザイン ビューで開きます。 リボン リソース ID が IDR_RIBBON1され、 リソース ビューに表示されます。 リボンには、1 つのカテゴリと 1 つのパネルが含まれています。

  3. [ アプリケーション ] ボタンは、そのプロパティを変更することでカスタマイズできます。 このコードで使用されるメッセージ ID は、Scribble 1.0 のメニューで既に定義されています。

  4. デザイン ビューで、[ アプリケーション ] ボタンをクリックしてプロパティを表示します。 プロパティの値を次のように変更します。Image to IDB_RIBBON_MAIN、Prompt to FileKeys to fLarge Images to IDB_RIBBON_FILELARGESmall Images to IDB_RIBBON_FILESMALL

  5. 次の変更により、ユーザーが [ アプリケーション ] ボタンをクリックしたときに表示されるメニューが作成されます。 メイン アイテムの横にある省略記号 (...) をクリックして、アイテム エディターを開きます。

    1. [項目の種類] ボタンが選択されている状態で、[追加] をクリックしてボタンを追加します。 キャプション&NewIDID_FILE_NEWImage to 0Image Large から 0 に変更します。

    2. [ 追加] をクリックしてボタンを追加します。 キャプション&SaveIDID_FILE_SAVEImage to 2Image Large2 に変更します。

    3. [ 追加] をクリックしてボタンを追加します。 キャプションSave &AsIDID_FILE_SAVE_ASImage to 3Image Large3 に変更します。

    4. [ 追加] をクリックしてボタンを追加します。 キャプション&PrintIDID_FILE_PRINTImage to 4Image Large4 に変更します。

    5. [アイテムの種類] を [区切り記号] に変更し、[追加] をクリックします。

    6. [項目の種類] を [ボタン] に変更します。 [ 追加] をクリックして 5 番目のボタンを追加します。 キャプション&CloseIDID_FILE_CLOSEImage to 5Image Large5 に変更します。

  6. 次の変更により、前の手順で作成した [印刷 ] ボタンの下にサブメニューが作成されます。

    1. [ 印刷 ] ボタンをクリックし、[アイテムの種類 ][ラベル] に変更して、[ 挿入] をクリックします。 キャプションPreview and print the documentに変更します。

    2. [ 印刷 ] ボタンをクリックし、[アイテムの種類 ][ボタン] に変更して、[ 挿入] をクリックします。 キャプション&PrintIDID_FILE_PRINTImage to 4Image Large4 に変更します。

    3. [ 印刷 ] ボタンをクリックし、[ 挿入 ] をクリックしてボタンを追加します。 キャプション&Quick PrintIDID_FILE_PRINT_DIRECTImage to 7Image Large7 に変更します。

    4. [ 印刷 ] ボタンをクリックし、[ 挿入 ] をクリックして別のボタンを追加します。 キャプションPrint Pre&viewIDID_FILE_PRINT_PREVIEWImage to 6Image Large6 に変更します。

    5. これで、メインアイテムが変更されました。 [ 閉じる ] をクリックして アイテム エディターを終了します。

  7. 次の変更により、[ アプリケーション ] ボタン メニューの下部に表示される終了ボタンが作成されます。

    1. ソリューション エクスプローラーで [リソース ビュー] タブを選択します。

    2. [プロパティ] ウィンドウで、[ボタン] の横にある省略記号 (...) をクリックして、アイテム エディターを開きます。

    3. [項目の種類] ボタンが選択されている状態で、[追加] をクリックしてボタンを追加します。 キャプションE&xitIDID_APP_EXIT に、イメージ8 に変更します。

    4. ボタンを変更しました。 [ 閉じる ] をクリックして アイテム エディターを終了します。

リボン バーのインスタンスの作成

次の手順では、アプリケーションの起動時にリボン バーのインスタンスを作成する方法を示します。 アプリケーションにリボン バーを追加するには、mainfrm.h ファイルでリボン バーを宣言します。 次に、mainfrm.cpp ファイルに、リボン リソースを読み込むコードを記述します。

リボン バーのインスタンスを作成するには

  1. mainfrm.h ファイルで、メイン フレームのクラス定義である CMainFrameの保護されたセクションにデータ メンバーを追加します。 このメンバーはリボン バー用です。

    // Ribbon bar for the application
    CMFCRibbonBar m_wndRibbonBar;
    
  2. mainfrm.cpp ファイルで、CMainFrame::OnCreate関数の最後の return ステートメントの前に次のコードを追加します。 リボン バーのインスタンスが作成されます。

    // Create the ribbon bar
    if (!m_wndRibbonBar.Create(this))
    {
        return -1;   //Failed to create ribbon bar
    }
    m_wndRibbonBar.LoadFromResource(IDR_RIBBON1);
    

リボン リソースのカスタマイズ

[ アプリケーション ] ボタンを作成したので、リボンに要素を追加できます。

このチュートリアルでは、すべてのパネルに同じパネル アイコンを使用します。 ただし、他のイメージ リスト インデックスを使用して、他のアイコンを表示することはできます。

[ホーム] カテゴリと [編集] パネルを追加するには

  1. Scribble プログラムに必要なカテゴリは 1 つだけです。 デザイン ビューの ツールボックスで、[ カテゴリ ] をダブルクリックして追加し、そのプロパティを表示します。 プロパティの値を次のように変更します: キャプション&Home大きい画像IDB_RIBBON_HOMELARGEに、 小さな画像IDB_RIBBON_HOMESMALLします。

  2. 各リボン カテゴリは、名前付きパネルに編成されます。 各パネルには、関連する操作を完了するコントロールのセットが含まれています。 このカテゴリには 1 つのパネルがあります。 [ パネル] をクリックし、[ キャプション ] を [ Editに変更します。

  3. [編集] パネルに、ドキュメントの内容をクリアするボタンを追加します。 このボタンのメッセージ ID は、 IDR_SCRIBBTYPE メニュー リソースで既に定義されています。 ボタンテキストとボタンを装飾するビットマップのインデックスとして Clear All を指定します。 ツールボックスを開き、ボタン[編集] パネルにドラッグします。 ボタンをクリックし、[ キャプション ] を [ Clear All]、[ ID ] を [ ID_EDIT_CLEAR_ALL]、[ Image Index to 0]、[ Large Image Index to 0] の順に変更します。

  4. 変更を保存し、アプリケーションをビルドして実行します。 Scribble アプリケーションが表示され、メニュー バーではなく、ウィンドウの上部にリボン バーが表示されます。 リボン バーにはカテゴリが 1 つ、[ ホーム] と [ ホーム ] に 1 つのパネル 、[ 編集] が表示されている必要があります。 追加したリボン ボタンは既存のイベント ハンドラーに関連付ける必要があり、[ 開く]、[ 閉じる]、[ 保存]、[ 印刷]、[ すべてクリア] ボタンは想定どおりに機能します。

アプリケーションの外観の設定

ビジュアル マネージャーは、アプリケーションのすべての描画を制御するグローバル オブジェクトです。 元の Scribble アプリケーションは Office 2000 ユーザー インターフェイス (UI) スタイルを使用しているため、アプリケーションは古い形式に見えます。 Office 2007 ビジュアル マネージャーを使用するようにアプリケーションをリセットして、Office 2007 アプリケーションに似た状態にすることができます。

アプリケーションの外観を設定するには

  1. CMainFrame::OnCreate関数で、return 0; ステートメントの前に次のコードを入力して、既定のビジュアル マネージャーとスタイルを変更します。

    // Set the default manager to Office 2007
    CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
    CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
    
  2. 変更を保存し、アプリケーションをビルドして実行します。 アプリケーション UI は Office 2007 UI のようになります。

次のステップ

リボン デザイナーを使用するように従来の Scribble 1.0 MFC サンプルを変更しました。 パート 2 に進

こちらも参照ください

チュートリアル
チュートリアル: MFC Scribble アプリケーションの更新 (パート 2)