このチュートリアルのパート 1 では、従来の Scribble アプリケーションに Office Fluent リボンを追加する方法について説明しました。 このパートでは、メニューやコマンドの代わりにユーザーが使用できるリボン パネルとコントロールを追加する方法を示します。
[前提条件]
セクション
このチュートリアルのこの部分には、次のセクションがあります。
リボンへの新しいパネルの追加
次の手順では、ツール バーとステータス バーの表示を制御する 2 つのチェック ボックスを含む ビュー パネルと、複数ドキュメント インターフェイス (MDI) ウィンドウ の作成と配置を制御する垂直方向の分割ボタンを含むウィンドウ パネルを追加する方法を示します。
ビュー パネルとウィンドウ パネルをリボン バーに追加するには
View
という名前のパネルを作成します。このパネルには、ステータス バーとツール バーを切り替える 2 つのチェック ボックスがあります。ツールボックスから、パネルを [ホーム] カテゴリにドラッグします。 次に、2 つの チェック ボックス をパネルにドラッグします。
パネルをクリックしてプロパティを変更します。 キャプションを
View
に変更します。最初のチェック ボックスをクリックして、そのプロパティを変更します。 ID を
ID_VIEW_TOOLBAR
に変更し、キャプションをToolbar
に変更します。2 番目のチェック ボックスをクリックして、そのプロパティを変更します。 ID を
ID_VIEW_STATUS_BAR
に変更し、キャプションをStatus Bar
に変更します。
分割ボタンを持つ
Window
という名前のパネルを作成します。 ユーザーが分割ボタンをクリックすると、ショートカット メニューに、Scribble アプリケーションで既に定義されている 3 つのコマンドが表示されます。ツールボックスから、パネルを [ホーム] カテゴリにドラッグします。 次に、 ボタン をパネルにドラッグします。
パネルをクリックしてプロパティを変更します。 キャプションを
Window
に変更します。ボタンをクリックします。 キャプションを
Windows
に、キーをw
に、大きな画像インデックスを1
に変更し、分割モードをFalse
に変更します。 次に、メニュー項目の横にある省略記号 (...) をクリックして、[アイテム エディター] ダイアログ ボックスを開きます。[ 追加] を 3 回クリックして、3 つのボタンを追加します。
最初のボタンをクリックし、[ キャプション ] を [
New Window
] に変更し、[ ID] を [ID_WINDOW_NEW
] に変更します。2 番目のボタンをクリックし、[ キャプション ] を [
Cascade
] に変更し、[ ID] を [ID_WINDOW_CASCADE
] に変更します。3 番目のボタンをクリックし、[ キャプション ] を [
Tile
] に変更し、[ ID] を [ID_WINDOW_TILE_HORZ
] に変更します。
変更を保存し、アプリケーションをビルドして実行します。 [表示] パネルと [ウィンドウ] パネルが表示されます。 ボタンをクリックして、正しく機能することを確認します。
リボンへのヘルプ パネルの追加
これで、Scribble アプリケーションで定義されている 2 つのメニュー項目を、 ヘルプ トピック と About Scribble という名前のリボン ボタンに割り当てることができます。 ボタンは 、ヘルプという名前の新しいパネルに追加されます。
ヘルプ パネルを追加するには
ツールボックスから、パネルを [ホーム] カテゴリにドラッグします。 次に、2 つの ボタンを パネルにドラッグします。
パネルをクリックしてプロパティを変更します。 キャプションを
Help
に変更します。最初のボタンをクリックします。 キャプションを
Help Topics
に変更し、ID をID_HELP_FINDER
に変更します。2 番目のボタンをクリックします。 キャプションを
About Scribble...
に変更し、ID をID_APP_ABOUT
に変更します。変更を保存し、アプリケーションをビルドして実行します。 2 つのリボン ボタンを含む ヘルプ パネルを表示する必要があります。
Von Bedeutung
[ヘルプ トピック] ボタンをクリックすると、Scribble アプリケーションによって、your_project_name.chm という名前の圧縮された HTML (.chm) ヘルプ ファイルが開きます。 そのため、プロジェクトの名前が Scribble でない場合は、ヘルプ ファイルの名前をプロジェクト名に変更する必要があります。
リボンへのペン パネルの追加
次に、ペンの太さと色を制御するボタンを表示するパネルを追加します。 このパネルには、太いペンと細いペンを切り替えるチェック ボックスが含まれています。 その機能は、Scribble アプリケーションの [太線 ] メニュー項目に似ています。
元の Scribble アプリケーションでは、ユーザーがメニューの [ペンの幅] をクリックしたときに表示されるダイアログ ボックスから ペンの幅 を選択できます。 リボン バーには新しいコントロール用の十分なスペースがあるため、リボンの 2 つのコンボ ボックスを使用してダイアログ ボックスを置き換えることができます。 1 つのコンボ ボックスで細いペンの幅を調整し、もう 1 つのコンボ ボックスで太いペンの幅を調整します。
ペン パネルとコンボ ボックスをリボンに追加するには
ツールボックスから、パネルを [ホーム] カテゴリにドラッグします。 次に、 チェック ボックス と 2 つの コンボ ボックス をパネルにドラッグします。
パネルをクリックしてプロパティを変更します。 キャプションを
Pen
に変更します。チェック ボックスをオンにします。 キャプションを
Use Thick
に変更し、ID をID_PEN_THICK_OR_THIN
に変更します。最初のコンボ ボックスをクリックします。 キャプションを
Thin Pen
、ID をID_PEN_THIN_WIDTH
、Type toDrop List
、Data to1;2;3;4;5;6;7;8;9;
、Text to2
に変更します。2 番目のコンボ ボックスをクリックします。 キャプションを
Thick Pen
、ID をID_PEN_THICK_WIDTH
、Type toDrop List
、Data to5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;
、Text to5
に変更します。新しいコンボ ボックスは既存のメニュー項目には対応しないため、すべてのペン オプションのメニュー項目を作成する必要があります。
[ リソース ビュー ] ウィンドウで、 IDR_SCRIBBTYPE メニュー リソースを開きます。
[ ペン ] をクリックしてペン メニューを開きます。 [ ここに入力 ] をクリックし、「
Thi&n Pen
」と入力します。入力したテキストを右クリックして [プロパティ ] ウィンドウを開き、ID プロパティを
ID_PEN_THIN_WIDTH
に変更します。すべてのペン メニュー項目のイベント ハンドラーを作成します。 作成した [Thi>n ペン ] メニュー項目を右クリックし、[ イベント ハンドラーの追加] をクリックします。 イベント ハンドラー ウィザードが表示されます。
ウィザードの [クラス] リスト ボックスで、[ CScribbleDoc ] を選択し、[ 追加と編集] をクリックします。 このコマンドは、
CScribbleDoc::OnPenThinWidth
という名前のイベント ハンドラーを作成します。次のコードを
CScribbleDoc::OnPenThinWidth
に追加します。// Get a pointer to the ribbon bar CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar(); ASSERT_VALID(pRibbon); // Get a pointer to the Thin Width combo box CMFCRibbonComboBox* pThinComboBox = DYNAMIC_DOWNCAST( CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THIN_WIDTH)); //Get the selected value int nCurSel = pThinComboBox->GetCurSel(); if (nCurSel>= 0) { m_nThinWidth = atoi(CStringA(pThinComboBox->GetItem(nCurSel))); } // Create a new pen using the selected width ReplacePen();
次に、太いペンのメニュー項目とイベント ハンドラーを作成します。
[ リソース ビュー ] ウィンドウで、 IDR_SCRIBBTYPE メニュー リソースを開きます。
[ ペン ] をクリックしてペン メニューを開きます。 [ ここに入力 ] をクリックし、「
Thic&k Pen
」と入力します。入力したテキストを右クリックして、[ プロパティ ] ウィンドウを表示します。 ID プロパティを
ID_PEN_THICK_WIDTH
に変更します。作成した シック ペン メニュー項目を右クリックし、[ イベント ハンドラーの追加] をクリックします。 イベント ハンドラー ウィザードが表示されます。
ウィザードの [クラス] リスト ボックスで、[ CScribbleDoc ] を選択し、[ 追加と編集] をクリックします。 このコマンドは、
CScribbleDoc::OnPenThickWidth
という名前のイベント ハンドラーを作成します。次のコードを
CScribbleDoc::OnPenThickWidth
に追加します。// Get a pointer to the ribbon bar CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx *) AfxGetMainWnd())->GetRibbonBar(); ASSERT_VALID(pRibbon); CMFCRibbonComboBox* pThickComboBox = DYNAMIC_DOWNCAST( CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THICK_WIDTH)); // Get the selected value int nCurSel = pThickComboBox->GetCurSel(); if (nCurSel>= 0) { m_nThickWidth = atoi(CStringA(pThickComboBox->GetItem(nCurSel))); } // Create a new pen using the selected width ReplacePen();
変更を保存し、アプリケーションをビルドして実行します。 新しいボタンとコンボ ボックスが表示されます。 さまざまなペンの幅を使用して、文字を書き出してみてください。
ペン パネルへのカラー ボタンの追加
次に、 CMFCRibbonColorButton オブジェクトを追加します。このオブジェクトを使用すると、ユーザーは色で文字を書き込めます。
ペン パネルにカラー ボタンを追加するには
色ボタンを追加する前に、そのメニュー項目を作成します。 [ リソース ビュー ] ウィンドウで、 IDR_SCRIBBTYPE メニュー リソースを開きます。 [ペン] メニュー項目をクリックして、ペン メニューを開きます。 [ ここに入力 ] をクリックし、「
&Color
」と入力します。 入力したテキストを右クリックして、[ プロパティ ] ウィンドウを表示します。 ID をID_PEN_COLOR
に変更します。次に、色ボタンを追加します。 ツールボックスから、[色] ボタンを [ペン] パネルにドラッグします。
色ボタンをクリックします。 キャプションを
Color
、ID をID_PEN_COLOR
、Simple Look toTrue
、Large Image Index to1
、Split Mode をFalse
に変更します。変更を保存し、アプリケーションをビルドして実行します。 [ ペン ] パネルに新しい色のボタンが表示されます。 ただし、イベント ハンドラーがまだないため、使用できません。 次の手順では、カラー ボタンのイベント ハンドラーを追加する方法を示します。
ドキュメント クラスへの Color メンバーの追加
元の Scribble アプリケーションにはカラー ペンがないため、それらの実装を記述する必要があります。 ドキュメントのペンの色を保存するには、ドキュメント クラスに新しいメンバーを追加 CscribbleDoc
。
ドキュメント クラスにカラー メンバーを追加するには
scribdoc.h の
CScribbleDoc
クラスで、// Attributes
セクションを見つけます。m_nThickWidth
データ メンバーの定義の後に、次のコード行を追加します。// Current pen color COLORREF m_penColor;
すべてのドキュメントには、ユーザーが既に描画したストークの一覧が含まれています。 すべてのストロークは、
CStroke
オブジェクトによって定義されます。CStroke
クラスにはペンの色に関する情報は含まれていないため、クラスを変更する必要があります。 scribdoc.h のCStroke
クラスで、m_nPenWidth
データ メンバーの定義の後に次のコード行を追加します。// Pen color for the stroke COLORREF m_penColor;
scribdoc.h で、パラメーターで幅と色を指定する新しい
CStroke
コンストラクターを追加します。CStroke(UINT nPenWidth);
ステートメントの後に次のコード行を追加します。CStroke(UINT nPenWidth, COLORREF penColor);
scribdoc.cppで、新しい
CStroke
コンストラクターの実装を追加します。CStroke::CStroke(UINT nPenWidth)
コンストラクターの実装後に、次のコードを追加します。// Constructor that uses the document's current width and color CStroke::CStroke(UINT nPenWidth, COLORREF penColor) { m_nPenWidth = nPenWidth; m_penColor = penColor; m_rectBounding.SetRectEmpty(); }
CStroke::DrawStroke
メソッドの 2 行目を次のように変更します。if (!penStroke.CreatePen(PS_SOLID, m_nPenWidth, m_penColor))
ドキュメント クラスの既定のペンの色を設定します。 scribdoc.cppで、
m_nThickWidth = 5;
ステートメントの後に次の行をCScribbleDoc::InitDocument
に追加します。// default pen color is black m_penColor = RGB(0, 0, 0);
scribdoc.cppで、
CScribbleDoc::NewStroke
メソッドの最初の行を次のように変更します。CStroke* pStrokeItem = new CStroke(m_nPenWidth, m_penColor);
CScribbleDoc::ReplacePen
メソッドの最後の行を次のように変更します。m_penCur.CreatePen(PS_SOLID, m_nPenWidth, m_penColor);
前の手順で
m_penColor
メンバーを追加しました。 次に、メンバーを設定するカラー ボタンのイベント ハンドラーを作成します。[ リソース ビュー] ウィンドウで、IDR_SCRIBBTYPE メニュー リソースを開きます。
[色] メニュー項目を右クリックし、[イベント ハンドラーの追加] をクリックします。 イベント ハンドラー ウィザードが表示されます。
ウィザードの [クラス] リスト ボックスで、[ CScribbleDoc ] を選択し、[ 追加と編集] ボタンをクリックします。 このコマンドは、
CScribbleDoc::OnPenColor
イベント ハンドラー スタブを作成します。
CScribbleDoc::OnPenColor
イベント ハンドラーのスタブを次のコードに置き換えます。void CScribbleDoc::OnPenColor() { // Change pen color to reflect color button's current selection CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar(); ASSERT_VALID(pRibbon); CMFCRibbonColorButton* pColorBtn = DYNAMIC_DOWNCAST( CMFCRibbonColorButton, pRibbon->FindByID(ID_PEN_COLOR)); m_penColor = pColorBtn->GetColor(); // Create new pen using the selected color ReplacePen(); }
変更を保存し、アプリケーションをビルドして実行します。 これで、カラー ボタンを押して、ペンの色を変更できるようになりました。
ペンの初期化と環境設定の保存
次に、ペンの色と幅を初期化します。 最後に、ファイルからカラー図面を保存して読み込みます。
リボン バーのコントロールを初期化するには
リボン バーのペンを初期化します。
m_sizeDoc = CSize(200,200)
ステートメントの後のCScribbleDoc::InitDocument
メソッドで、次のコードをscribdoc.cppに追加します。// Reset the ribbon UI to its initial values CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar(); ASSERT_VALID(pRibbon); CMFCRibbonColorButton* pColorBtn = DYNAMIC_DOWNCAST( CMFCRibbonColorButton, pRibbon->FindByID(ID_PEN_COLOR)); // Set ColorButton to black pColorBtn->SetColor(RGB(0, 0, 0)); CMFCRibbonComboBox* pThinComboBox = DYNAMIC_DOWNCAST( CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THIN_WIDTH)); // Set Thin pen combobox to 2 pThinComboBox->SelectItem(1); CMFCRibbonComboBox* pThickComboBox = DYNAMIC_DOWNCAST( CMFCRibbonComboBox, pRibbon->FindByID(ID_PEN_THICK_WIDTH)); // Set Thick pen combobox to 5 pThickComboBox->SelectItem(0);
カラー図面をファイルに保存します。
ar << (WORD)m_nPenWidth;
ステートメントの後に、CStroke::Serialize
メソッドで次のステートメントをscribdoc.cppに追加します。ar << (COLORREF)m_penColor;
最後に、ファイルからカラー図面を読み込みます。
m_nPenWidth = w;
ステートメントの後に、CStroke::Serialize
メソッドに次のコード行を追加します。ar >> m_penColor;
次に、色を付けて書き込み、図面をファイルに保存します。
結論
MFC Scribble アプリケーションを更新しました。 このチュートリアルは、既存のアプリケーションを変更する場合のガイドとして使用します。