FastReports C++. Быстрый старт

Ситуация, нужно сделать распечатку данных, несколько путей решений, первый, не самый удобный, рисовать в контексте принтера, как показано ниже:
Способ 1:

CPrintDialog cp(FALSE);
        if (cp.DoModal()==IDOK)
        {
                CDC PrintDC;
                PrintDC.Attach(cp.GetPrinterDC());
                DOCINFO infStru;
                ::ZeroMemory (&infStru, sizeof (DOCINFO));
                CString title="Анализ данных";
                infStru.cbSize = sizeof (DOCINFO);
                infStru.lpszDocName=title;
                infStru.lpszOutput=NULL;
                if (PrintDC.StartDoc(&infStru )==-1)AfxMessageBox("Ошибка StartDoc") ;
                PrintDC.StartPage();
 
                PrintDC.MoveTo(10,10);
                PrintDC.LineTo(100,100);
                PrintDC.TextOut(250,25,”Test”);
                
                if (PrintDC.EndPage()<0) AfxMessageBox("Ошибка EndPage");
                if (PrintDC.EndDoc()==0) AfxMessageBox("Ошибка EndDoc");
                PrintDC.Detach();
        }

Способ 2: Использовать генератор отчётов FastReports, очень гибкий и удобный инструмент создания отчетов. Рассмотрим в шагах как быстро начать его использовать.

1 шаг:
Скачиваем с сайта http://www.fast-report.com/ru/ генератор отчетов FASTREPORT® STUDIO и устанавливаем.

2 шаг:
Открываем, дизайнер отчетов(FastReport Designer), создаем пустой отчет, и помещаем на листе отчета два объекта текст с именами по умолчанию Memo1 и Memo2, сохраняем отчет рядом с файлом приложения, из которого будет вызываться отчет.

3 шаг:
Создаем приложение на основе диалога, открываем файл исходника реализации функций диалога и в самом начале пишем:

#if _MSC_VER < 1300
  #import "C:\Program Files\FastReports\FastReport Studio Trial\Bin\FastReport3.dll" named_guids
#else
 #import "libid:d3c6fb9b-9edf-48f3-9a02-6d8320eaa9f5" named_guids
#endif
using namespace FastReport; 

4 шаг:
Добавляем на форму диалога кнопку, в функции реализации которой пишем:

void CTestFRDlg::OnButtonTest()
{
        CoInitialize(NULL);
        IfrxReportPtr pReport(__uuidof(TfrxReport));
        pReport->LoadReportFromFile("Test.fr3");
        IfrxComponent * Obj= pReport->FindObject(_bstr_t("Memo1"));
        IfrxMemoView * pMemoObj;
        Obj->QueryInterface(__uuidof(IfrxMemoView), (PVOID*) &pMemoObj);
        pMemoObj->put_Memo(_bstr_t("Test 1"));
        
        Obj= pReport->FindObject(_bstr_t("Memo2"));
        Obj->QueryInterface(__uuidof(IfrxMemoView), (PVOID*) &pMemoObj);
        pMemoObj->put_Memo(_bstr_t("Test 2"));
 
        pReport->ShowReport();
 
        pMemoObj-> Release();
        Obj     -> Release();
        CoUninitialize();
}

5 шаг:
Компилируем, линкуем, запускаем приложение и нажимаем кнопку, в открывшемся отчете видим измененные текстовые объекты, теперь отчет можно распечатать или сохранить в электроном виде. Здесь можно скачать пример приложения.