Implementing a Non-Automated Annotations Program (C++ 5.0 and later)
Take the following steps to start a project and to add some code that positions, scales, and displays an image in a dialog box.
| 1. | Start a new project as follows: | |
| 
 | Run Microsoft Visual C++ 5.0, select the File >New menu option, and do the following: | |
| 
 | a. | Click the Projects tab. | 
| 
 | b. | Select MFC AppWizard (exe) as the project type | 
| 
 | c. | In the Project name text box, specify Annotation. | 
| 
 | d. | In the Location text box, specify the path of the project. | 
| 
 | e. | Click the OK button. | 
| 2. | In the Step 1 dialog box, do the following: | |
| 
 | a. | Select Dialog based. | 
| 
 | b. | Click the Next button. | 
| 3. | In the Step 2 of 4 dialog box, do the following: | |
| 
 | a. | Ensure that About Box is selected. | 
| 
 | b. | Ensure that 3D Controls is selected. | 
| 
 | c. | Click the Next button. | 
| 4. | In the Step 3 of 4 dialog box, do the following: | |
| 
 | a. | For comments, ensure that Yes, Please is selected. | 
| 
 | b. | For how to use the MFC library, select Use MFC in a Shared DLL. | 
| 
 | c. | Click the Next button. | 
| 5. | In the Step 4 of 4 dialog box, just click Finish. | |
| 6. | Read New Project Information, and click OK. (The AppWizard creates the project files and opens the project.) | |
| 7. | Add #include statements to your program so you can access the LEAD Class Library constants and classes: | |
| 
 | a. | In the Project Workspace, click the FileView tab. | 
| 
 | b. | Double-click the Annotation files folder to open it. | 
| 
 | c. | Double-click the Header Files folder to open it. | 
| 
 | d. | Double-click the StdAfx.h file to edit it. | 
| 
 | Add the following lines to the end of the file (keep in mind, you may have to change the path to where the header files reside): | |
#include ""..\..\..\..\include\ClassLib\ltWrappr.h
| 8. | Add a Button control to the main window as follows: | |
| 
 | a. | In the Project Workspace, click the ResourceView tab. | 
| 
 | b. | Double-click the Annotation resources folder to open it. | 
| 
 | c. | Double-click the Dialog folder to open it. | 
| 
 | d. | Double-click IDD_ANNOTATION_DIALOG to design the form. | 
| 
 | e. | Select the TODO... text control; then press the Delete key to delete it. | 
| 9. | Add a command button to your form and name it as follows: | |
| 
 | ID | Caption | 
| 
 | IDC_BITMAPWND | Bitmap Window | 
| 10. | Change the command button properties as follows: | |
| 
 | a. | Right-click on the button then select properties. | 
| 
 | b. | Click the Styles tab. | 
| 
 | c. | Select the Flat check box | 
| 
 | d. | Select the Owner Draw check box | 
| 
 | e. | Click the General tab. | 
| 
 | f. | Clear the Visible check box | 
| 
 | g. | Close the dialog | 
| 11. | Press Ctrl-F4 to close all windows back to the Project Workspace. | |
| 12. | Add the following Member Variables to CAnnotationDlg Class: | |
| 
 | LAnnContainer | m_LeadAContainer; | 
| 
 | LPaint | m_LPaint; | 
| 
 | LBitmap | m_LBitmap; | 
| 
 | void | CreateNoteAnn(HWND hWnd); | 
| 
 | void | AnnStart(HWND hWnd); | 
| 13. | Go to the OnInitDialog() function as follows: | |
| 
 | a. | In the Project Workspace, click the ClassView tab. | 
| 
 | b. | Double-click the Annotation classes folder to open it. | 
| 
 | c. | Expand the CAnnotationDlg class. | 
| 
 | d. | Double-click the OnInitDialog() function to edit it. | 
| 14. | Edit the OnInitDialog() function to add the following code after the line that says //TODO: Add extra initialization here: | |
   LSettings::LoadLibraries (LT_ALL_LEADLIB);
   LSettings::UnlockSupport(L_SUPPORT_DOCUMENT, L_KEY_DOCUMENT);
| 15. | Add implementation to the member method in the CAnnotationDlg class: | |
| 
 | a. | In the Project Workspace, click the FileView tab. | 
| 
 | b. | Double-click the Annotation files folder to open it. | 
| 
 | c. | Double-click the Source files folder to open it. | 
| 
 | d. | Double-click the AnnotationDlg.cpp file to edit it. | 
| 
 | e. | Add the following to the end of the file: | 
void CAnnotationDlg::AnnStart(HWND hWnd)
{
   RECT rcClientArea;
   ANNRECT rcContainerRect;
   HDC hDC;
   m_LBitmap.Load(TEXT("c:\\parrots.jpg"));
   ::GetClientRect(hWnd,&rcClientArea);
   m_LBitmap.SetDstRect(&rcClientArea);
   hDC = ::GetDC(hWnd);
   /*Display our Bitmap*/
   m_LPaint.SetBitmap(&m_LBitmap);
   m_LPaint.SetDC(hDC);
   m_LPaint.PaintDC();
   ::ReleaseDC(hWnd,hDC);
   // Create Container
   rcContainerRect.left = 0;
   rcContainerRect.top = 0;
   rcContainerRect.right = rcClientArea.right-rcClientArea.left;
   rcContainerRect.bottom = rcClientArea.bottom-rcClientArea.top;
   m_LeadAContainer.Create(hWnd,&rcContainerRect,TRUE);
   m_LeadAContainer.SetOffsetX((L_DOUBLE) 0, 0);
   m_LeadAContainer.SetOffsetY((L_DOUBLE) 0, 0);
}
void CAnnotationDlg::CreateNoteAnn(HWND hWnd)
{
   LAnnNote AnnNote;
   RECT rcAnnBounds;
   HDC hDC;
   ANNRECT rcContainerRect;
   ANNRECT rcNoteRect;
   hDC = ::GetDC(hWnd); 
   m_LeadAContainer.GetRect(&rcContainerRect);
   int nRet = AnnNote.Create();
   /* Size and position the note */
   rcNoteRect.left = rcContainerRect.right / 8;
   rcNoteRect.top = rcContainerRect.bottom / 8;
   rcNoteRect.right = rcContainerRect.right / 2;
   rcNoteRect.bottom = rcContainerRect.bottom / 2;
   nRet = AnnNote.SetRect(&rcNoteRect);
   nRet = AnnNote.SetText(TEXT("This is my text"), 0);
   nRet = AnnNote.SetBackColor(RGB(0, 255, 255), 0);
   nRet = AnnNote.SetFontBold(TRUE, 0);
   AnnNote.SetFontItalic (FALSE, 0);
   AnnNote.SetFontName (TEXT("Arial"), 0);
   AnnNote.SetFontSize (16, 0);
   AnnNote.SetFontStrikeThrough(FALSE, 0);
   AnnNote.SetFontUnderline(TRUE, 0);
   AnnNote.SetForeColor (RGB(255, 0, 0), 0);
   /* Display the note */
   AnnNote.SetVisible(TRUE);
   nRet = m_LeadAContainer.Insert(AnnNote);
   nRet = m_LeadAContainer.GetBoundingRect(&rcAnnBounds, NULL);
   nRet = m_LeadAContainer.Draw(hDC,&rcAnnBounds);
  ::ReleaseDC(hWnd,hDC);
}
| 16. | Add a command control to your from and name it as follows: | |
| 
 | ID | Caption | 
| 
 | IDC_STARTANN | &Start Annotation | 
| 17. | Press Ctrl-W to go to the MFC Class Wizard; then do the following: | |
| 
 | a. | Click the Message Maps tab. | 
| 
 | b. | In the Class Name combo box, select CAnnotationDlg. | 
| 
 | c. | In the Object IDs list box, select IDC_STARTANN. | 
| 
 | d. | In the Messages list box, select BN_CLICKED. | 
| 
 | e. | Click the Add function button. Choose OK for the default function name (OnStartANN). | 
| 
 | f. | Click the Edit Code button and enter the following code: | 
   AnnStart(GetDlgItem(IDC_BITMAPWND)->GetSafeHwnd());
   CreateNoteAnn(GetDlgItem(IDC_BITMAPWND)->GetSafeHwnd());
| 18. | On the main menu, select Build > Build Annotation.exe to build the project. | 
| 19. | On the main menu, select Build > Execute Annotation.exe to run the project. |