Lab
Lab
Task 1 - Create a new MFC project with Ribbon in Visual Studio 2010 .............................................. 3
EXERCISE 2: ADDING SIMPLE CONTROLS TO AN EXISTING RIBBON ........................................... 12
Task 1 - Adding simple controls to an existing Ribbon .................................................................... 12 Task 2 - Add event handlers to the controls ................................................................................... 16
EXERCISE 3: ADDING AND USING MORE CONTROLS TO AN EXISTING RIBBON ......................... 17
Task 1 - Build the existing Ribbon application to see the Ribbon controls ....................................... 17 Task 2 - Disable and Enable a button at run time............................................................................ 19 Task 3 - Display the currently selected combo box item. ................................................................ 20 Task 4 - Draw a rectangle in the View when a button is clicked ...................................................... 21 Task 5 - Change the color of the rectangle ..................................................................................... 23 Task 6 - Move the slider to zoom the rectangle .............................................................................. 24
SUMMARY............................................................................................................................................ 26
Overview
This tutorial is intended for MFC developers who are developing desktop applications and want to take advantage of the new MFC Ribbon framework. The tutorial steps you through how to add a default Ribbon to a small application, edit various Ribbon controls in Ribbon Designer, and then use the controls at run time. You will learn how easily MFC Ribbon framework allows you to edit and use Ribbon controls. When you are finished, you will have performed all the steps necessary to add and customize a basic Ribbon in an application. The tutorial will involve real-time compiling of code and copying code from this document. In the event that a copying error (or any other problem) prevents the application from compiling, you can find fully completed samples in the tutorial package, along with the final source code for each exercise. These samples can be used to unblock compiling errors.
Prerequisites
You must have the following items to complete this lab: Microsoft Visual Studio 2010 Beta 2 (or higher) Windows 7
Learning Objectives
While completing this tutorial, you will learn how to: Create a default Ribbon for your application in Visual Studio 2010 Add Ribbon controls such as buttons, checkbox and chunks in Ribbon Designer Add Event handler functions for Ribbon control in Ribbon Designer Use the Ribbon controls at run time
1. In Visual Studio 2010, use the MFC Application Wizard to create an MFC application that has a default ribbon. To run the wizard, on the File menu, point to New, and then select Project. The New Project dialog box will be displayed. 2. In the New Project dialog box, expand the Visual C++ node in the Project Types pane and select MFC. In the Templates pane, select MFC Application. Type a name for the project, such as RibbonApp, and click OK. Please refer to Figure 1-1. The MF Application Wizard will be displayed.
Figure 1-1 3. In the Application Type pane, change Project Style to Office, and change Visual Style and Colors to Windows 7. Leave everything else as it is, and click Next. Please refer to Figure 12.
Figure 1-2 4. Leave the Compound Document Support settings at the default (the None checkbox is checked). Please refer to Figure 1-3.
Figure 1-3 5. In the Document Template Strings pane, leave everything at the default. Please refer to Figure 1-4.
Figure 1-4 6. In the Database Support pane, leave everything at the default settings (None should be selected). Click Next. Please refer to Figure 1-5.
Figure 1-5 7. In the User Interface Features pane, make sure that the Use a Ribbon option is selected. Click Next. Please refer to Figure 1-6.
Figure 1-6 8. In the Advanced frame pane, clear all options. Click Next. Please refer to Figure 1-7.
Figure 1-7 9. In the Generated Classes pane, leave everything at the default settings. Please refer to Figure 1-8.
Figure 1-8 10. To build the application, on the Build menu, select Build Solution. If the application builds successfully, run the application by selecting Start Debugging from the Debug menu. The wizard will automatically create a Ribbon in Windows 7 Style with one Ribbon category that is named Home. This category contains three ribbon panels, which are named Clipboard, View and Window. Please refer to Figure 1-9.
Figure 1-9
Figure 2-1 3. Drag a Category control from the Toolbox to the Ribbon Bar. In the Designer, you will see a Category named Category1 and a Panel in Category1 named Panel1 . Drag two Button controls from the Toolbox to Panel1. The buttons are named Button1 and Button2 by default. The Ribbon Bar has a new look, which is shown in Figure 2-2.
Figure 2-2 4. Right click Category1, and select Properties to open the Properties window. As shown in the Property window in Figure 2-3, you can easily rename the Caption to My Category, and edit the other properties. In the Property Window, select IDB_WRITELARGE from the drop down list of Large Images, and select IDB_WRITESMALL from the drop-down list of Small Images. This defines the image collection for the elements in this category.
Figure 2-3 5. Open the Properties window of the buttons you just created, and change the captions to My Button and My Choice. To add an image to your buttons, open the Properties window of My Choice and click Large Image Index (you will see a Browse button when you select the value field, which will allow you to browse the image collection). Click the Browse button, and the Image Collection dialog will pop up. Select 0 and edit the other properties as shown in Figure 2-4. Change the value of Large Image Index to 0 to add an image for My Button.
Figure 2-4 6. Test your Ribbon by clicking the Test Ribbon button on the toolbar, as shown in Figure 2-5.
Figure 2-5 7. Build and Run your application. Now, it has a new look as shown in Figure 2-6. The two buttons that you created (My Choice and My Button) are disabled by default. The buttons will be enabled once you add a click event handler for each of them.
Figure 2-6
Task 2 - Add event handlers to the controls 1. It is very easy to add event handlers in the Ribbon Designer. Right click the My Button Button control, and select Add Event Handler. The Event Handler Wizard will open. Select the Command message type and CMainFrame from the class list, as shown in Figure 2-7.
Figure 2-7 2. Click Add and Edit. The wizard will generate some functions automatically for you, and then open the source code editor. Here, you will see the empty function CMainFrame::OnMyButton()in MainFrm.cpp. 3. Add the following line of code to the function OnMyButton() in Mainfrm.cpp. C++
MessageBox(TEXT("This is My Button!"), TEXT("My Button"), MB_OK);
4. Build and Run your solution. Your application will have a Ribbon Bar with one Category and two buttons. Click the My Button button, and test your application as shown in Figure 2-8.
Figure 2-8
4. The application as shown in Figure 3-1 will open. All of the ribbon controls shown here were created using the Ribbon Designer. (Exercise 2 shows how to use the Ribbon Designer.)
Figure 3-1 5. Click the My Category tab, and you will see the ribbon change, as shown in Figure 3-2
Figure 3-2
Help: For your convenience, some variables and functions (such as event handler functions and helper functions) are already declared and defined for you in this project, so you only need to focus on the implementation in the following tasks.
Task 2 - Disable and Enable a button at run time 1. You can add code manually to disable or enable a button. As shown in Figure 3-2, the Disable panel of My Category includes one check box and one button. You can trigger an event by selecting or clearing the check box. Selecting the check box will disable the Object button. The variables have been declared for you, along with some necessary functions. 2. To update the event handler functions for the checkbox control in MainFrm.cpp, enter the following code: C++
void CMainFrame::OnDisableCheckbox() { m_bChecked = !m_bChecked; }
3. You must also update an event handler function for the button object in MainFrm.cpp as follows: C++
void CMainFrame::OnUpdateDisableObject(CCmdUI *pCmdUI) { pCmdUI->Enable(m_bChecked); }
4. Build and run your application. If you select the Disable Object Button check box, the Object button will be disabled, as shown in Figure 3-3.
Figure 3-3 Task 3 - Display the currently selected combo box item. 1. Update the function in Mainfrm.cpp, so that a message box will be displayed when an item is selected from the drop-down list in the combo box: C++
void CMainFrame::OnComboMessage() { CMFCRibbonComboBox* pFontComboBox = DYNAMIC_DOWNCAST(
CMFCRibbonComboBox, m_wndRibbonBar.FindByID(ID_COMBO_BOX)); // Get the selected index int nCurSel =pFontComboBox->GetCurSel(); if (nCurSel >= 0) { CString item=pFontComboBox->GetItem(nCurSel); CString sMessage = _T(""); sMessage.Format(_T("Current Selected Item is \"%s\"."),item); MessageBox(sMessage, _T("Combo Box Item"), MB_OK); } else { MessageBox(_T("Please select one item from droplist of Combo Box."), _T("Combo Box Item"), MB_OK); } }
2. Build and run the application. 3. Select an item from the combo box, and click the Message Box button. A message box will be displayed, as shown below in Figure 3-4.
Figure 3-4
1. The Rectangle panel on the Home category includes a Draw button (see Figure 3-1). Update the following function in CRibbonAppDoc.app as shown below, so that a rectangle will be drawn when the Draw button is clicked. C++
CRibbonAppDoc::CRibbonAppDoc() { // TODO: add one-time construction code here m_bDraw = FALSE; } bool CRibbonAppDoc::EnableDraw(void) { return m_bDraw; } void CRibbonAppDoc::OnRectDraw() { m_bDraw = TRUE; UpdateAllViews(NULL); }
2. Add the following lines to the void CRibbonAppView::OnDraw(CDC* pDC) function in RibbonAppView.cpp after the comment //TODO: add draw code for native data here , as follows: C++
// Draw a rectangle CRect client; CBrush brush; GetWindowRect(&client); if (pDoc->EnableDraw() && brush.CreateSolidBrush(RGB(255,0,222))) { int width=client.Width()/2; // to make it smaller int height= client.Height()/2; CRect rect=CRect(0,0, width, height); pDC->FillRect(rect, &brush); }
3. Build and run the solution. Click the Draw button to see the application as shown in Figure 35.
Figure 3-5 Task 5 - Change the color of the rectangle 1. The Color combo box in the Font panel controls the color of the rectangle. To enable the Color control, implement a function called CRibbonAppDoc::GetColor(void) in CRibbonAppDoc.cpp as follows: C++
COLORREF CRibbonAppDoc::GetColor(void) { CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())>GetRibbonBar(); ASSERT_VALID(pRibbon); CMFCRibbonColorButton* pColor = DYNAMIC_DOWNCAST( CMFCRibbonColorButton, pRibbon->FindByID(ID_FONT_COLOR)); // Get the selected color return pColor->GetColor(); }
UpdateAllViews(NULL); }
3. Update the void CRibbonAppView::OnDraw(CDC* pDC) function by changing the line brush.CreateSolidBrush(RGB(255,0,222)) to the followingl: C++
brush.CreateSolidBrush(pDoc->GetColor())
4. Build and run the application. 5. Click the Draw button, and select the color Yellow from the Color combo box to see the new UI shown in Figure 3-6.
Figure 3-6
Task 6 - Move the slider to zoom the rectangle 1. Update the helper function double CRibbonAppDoc::GetSliderFactor(void) in
CRibbonAppDoc.cpp as follows:
C++
// Return the factor of zooming the rectangle double CRibbonAppDoc::GetSliderFactor(void) { // Get a pointer to the ribbon bar
CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())>GetRibbonBar(); ASSERT_VALID(pRibbon); CMFCRibbonSlider* pSlider = DYNAMIC_DOWNCAST( CMFCRibbonSlider, pRibbon->FindByID(ID_RECT_SLIDER)); // Get current position int position =pSlider->GetPos(); return (double)position/(double)pSlider->GetRangeMax(); }
3. Update the void CRibbonAppView::OnDraw(CDC* pDC) function to enable the Slider function. C++
if (pDoc->EnableDraw() && brush.CreateSolidBrush(pDoc->GetColor())) { int width=client.Width()/2; // to make it smaller int height= client.Height()/2; double factor=pDoc->GetSliderFactor(); if (factor) { width=width*factor; height=height*factor; } CRect rect=CRect(0,0, width, height); pDC->FillRect(rect, &brush); }
4. Build and run the application. 5. Click the Draw button, and then move the slider. When the Slider is moved, the rectangle will be resized using a zoom factor, as shown in Figure 3-7.
Figure 3-7 Help: By the end of this exercise, the application you build with EX03_Starter\Begin\RibbonApp\RibbonApp.sln should be the same as the application built using EX03_Starter\End\RibbonApp\RibbonApp.sln.
Summary
You have successfully completed the MFC Ribbon introductory tutorial. You have learned how the new MFC Ribbon Framework can help you to quickly and easily create a Ribbon application using the MFC wizard and Ribbon Designer.