Реферат: Текстовый редактор

КУРСОВАЯ РАБОТА

подисциплине: «Высокоуровневые методы информатики и программирования»

на тему: Текстовыйредактор


ПЛАН

1. Введение

2. Работа с текстовыми документами

3. Класс CEdit

4. Описание работы программы

5. Заключение

6. Список использованных источников

7. Приложение «Текстовый редактор»


1.ВВЕДЕНИЕ

Вначале семидесятых консорциум очень умных людей разрабатывал компьютернуюсистему Muitix. Ее предназначением было обеспечение недорогого всеобщегодоступа к графическим, текстовым и другим файлам. Конечно, это была совершенноглупая идея, и в целом проект провалился. Небольшая группа инженеров,работающих в лабораториях Белла, решила использовать фрагменты Muitix внебольшой операционной системе, которую окрестили Unix.

Этиинженеры не имели одной большой мощной машины, а лишь несколько маломощныхмашин разных производителей. Поскольку все они были разные, каждую программутребовалось перерабатывать под каждую машину. Чтобы избежать этих мучений, былразработан небольшой, но мощный язык, который назвали С.

ЯзыкС оказался действительно мощным и очень скоро завоевал передовые позиции средисредств разработки программного обеспечения. Однако со временем впрограммировании появились новые технологии (например, достойное самогобольшого внимания объектно-ориентированное программирование), которыепостепенно вытесняли язык С. Не желая остаться за бортом, инженерное сообществоусовершенствовало С, дополнив его новыми возможностями и получив в результатеновый язык программирования C++. Язык C++ включает:

·         словарь понятныхдля людей команд, которые конвертируются в машинный язык;

·         структуру языка(или грамматику), которая позволяет пользователямсоставлять из команд работающие программы.

Вкурсовой работе по предмету ВУМИП мне было необходимо сделать текстовыйредактор на языке Visual C++.

Разрабатываемыймною текстовый редактор является созданным мастером MFC Application Wizardприложением, которое поддерживает архитектуру документ-представление. Программадолжна обеспечивать ввод и редактирование текста в окне представления иотображать полосы прокрутки. Меню программы должно содержать команды печати,отмены последних действий, относящихся к редактированию, команды вырезания,копирования и вставки текста, а также поиска. Для реализации операций ввода иредактирования текста внутри окна представления необходимо класс представлениясделать производным от MFC-класса CEditView. При этом меню приложения будетсодержать набор команд редактирования, и программисту не потребуется писать коддля данных функций.


2. РАБОТАС ТЕКСТОВЫМИ ДОКУМЕНТАМИ

СпециалистыMicrosoft считают текстовые документыединственным достойным объектом своей работы. Вся операционная системаразрабатывалась именно для работы с данным типом документов. Поэтому,рассматривая Visual C++, нельзя обойти молчанием этуобласть его применения.

Однаковследствие своей любви к написанию редакторов создатели Visual C++ самостоятельно разработали дватипа редакторов, обеспечив их всеми необходимыми с их точки зрения функциями и,посчитав свои творения совершенством, практически исключили всякоевмешательство в их работу со стороны пользователя. Эти редакторы реализованы вобъектах классов CEdit и CRichEditview. Первый из них представляет собойпростейший редактор, используемый в текстовых полях диалоговых окон, и непредусматривает форматирования текста и использование различных шрифтов. Всеэти возможности имеются в текстовом редакторе, реализованном в классе CRichEditview. Возможности, предоставляемые этимредактором, наглядно продемонстрированы в текстовом редакторе WordPad, являющемся примером использованияданного класса, текст которого можно найти в библиотеке MSDN.

3. КЛАССCEDIT

Объект класса CEditобеспечивает функционирование элемента управления текстового поля Windows.Текстовое поле Windows представляет собой прямоугольное дочернее окно, вкоторое пользователь может вводить текст. Данный элемент управления можетсоздаваться в шаблоне диалога или непосредственно в программе пользователя. Вобоих случаях сначала вызывается конструктор класса CEdit, создающий объектданного класса, а затем вызывается функция Create, создающая текстовое полеWindows и связывающая его с объектом класса CEdit. Объект класса, производногоот класса CEdit может быть создан за один шаг, если в его конструкторе будетвызвана функция Create. Объект класса CEdit наследует многие возможностиобъекта класса CWnd. Чтобы записать текст в объект класса CEdit, используется функцияCWnd::SetWindowText, а чтобы считать его оттуда используется функцияCWnd::GetWindowText. Эти функции позволяют записать или считать весь текст,содержащийся в данном элементе управления даже в том случае, когда он являетсямногострочным. В том случае, если данный элемент управления являетсямногострочным, в нем могут использоваться следующие функции для работы с частьюсодержащегося в нем текста: CEdit::GetLine, CEdit::SetSel,

CEdit::GetSel и CEdit::ReplaceSel. Чтобы обработать сообщение,посылаемое текстовым полем своему родительскому окну (обычно это объект класса,производного от CDialog), добавьте соответствующий макрос в карту сообщений исоздайте функцию для обработки данного сообщения. Макрос карты сообщений дляданного типа сообщений имеет следующий формат:

ON_Notification(id,memberFxn)

где id — идентификатордочернего окна элемента управления, посылающего сообщение, а memberFxn — имяфункции обработки данного сообщения в классе родительского окна. Прототипфункции обработки сообщения имеет следующий формат:

afx_msg void memberFxn();

Ниже приведен списокмакросов карты сообщений, которые могут использоваться для обработки сообщений,посылаемых данным элементом управления:

/>ON_EN_CHANGE — пользователь произвелдействие, которое может привести к изменению текста, содержащегося в текстовомполе. В отличие от сообщения EN_UPDATE данное сообщение посылается после того,как Windows произведет обновление экрана;

/>ON_EN_ERRSPACE — для данноготекстового поля не может быть выделен необходимый для него объем памяти;

/>ON_EN_HSCROLL — пользовательвоспользовался горизонтальной полосой прокрутки данного элемента управления.Сообщение посылается родительскому окну до обновления экрана;

/>ON_EN_KILLFOCUS — данное текстовоеполе потеряло фокус ввода;

/>ON_EN_MAXTEXT — текущая вставкапривела к превышению определенного в данном объекте максимального числасимволов, что привело к ее урезанию. Данное сообщение посылается также в томслучае, если текстовое поле не имеет стиля ES_AUTOHSCROLL, а количествосимволов в текущей строке превышает ширину текстового поля. Другим случаем,когда посылается данное сообщение, является случай, когда текстовое поле неимеет стиля ES_AUTOVSCROLL, а количество строк в нем превышает высотутекстового поля, или же текстовое поле не имеет стиля ES_AUTOHSCROLL, аколичество символов в текущей строке превышает ширину текстового поля;

/>ON_EN_SETFOCUS — данное текстовоеполе получило фокус ввода;

/>ON_EN_UPDATE — в текстовом полебудет выводиться измененный текст. Посылается после того, как элементуправления отформатирует текст, но до того, как этот текст будет выведен втекстовое поле, что позволяет изменить размеры текстового поля в случаенеобходимости;

/>ON_EN_VSCROLL — пользовательвоспользовался вертикальной полосой прокрутки данного элемента.

При создании объектакласса CEdit в диалоговом окне этот объект автоматически уничтожается призакрытии диалогового окна. То же самое происходит и в том случае, когда объекткласса CEdit создается в шаблоне диалога. Если объекта класса CEdit создается вокне, то от пользователя может потребоваться его уничтожить. Если же объекткласса CEdit создается в стеке, то он уничтожается автоматически. При созданииобъекта класса CEdit в куче с использованием оператора new его необходимоуничтожить после завершения работы пользователя с элементом управления Windowsс использованием оператора delete. Если в объект класса, производного от CEdit,была распределена какая-либо память, то необходимо перегрузить деструкторданного класса таким образом, чтобы он освобождал эту память. Описание данногокласса содержится в файле заголовка afxwin.h.

4.ОПИСАНИЕ РАБОТЫ ПРОГРАММЫ

Послезапуска программы появляется окно «EditApp». Так выглядит внешний вид программы.

/>

МенюФайл имеет следующие пункты: Новый, Открыть, Закрыть, Сохранить, Сохранить как,Печать, Предварительный просмотр, Настройка печати, Выход.

/>

МенюПравка имеет следующие пункты: Отменить, Вырезать, Копировать, Вставить, Поиск.

/>

Поиск: Выбрав это менювыскочить окно поиска, куда нужно ввести искомое слово и нажать ОК.

/>

Результатпоиска

/>


МенюВид имеет следующие пункты: Панель инструментов, Строка состояния, т.е пожеланию их можно скрыть.

/>

Меню Окно имеет следующиепункты: Новое окно, Каскадом, Заголовками, Сортировать иконки, за разделителемрасполагаются имена открытых файлов, а галочкой помечается тот файл, с которымработают. При создание нового документа окно открывается прямо в программе, ане в новом файле. По желанию пользователь может расположить их каскадом илизаголовками для удобства работы.

/>

МенюПомощь содержит информацию о программе.

/>


5. ЗАКЛЮЧЕНИЕ

В ходе выполнениякурсовой работы предоставленная программа была выполнена и работала. Конечноэто простой текстовый редактор и у него мало функций по сравнению с MS WORD. Он чем-то похож на простой блокнот.

Единственное его отличиечто он был написан на языке С++. Язык С++ работал без наладок, был прост вобращении, возникающие ошибке при программировании легко исправлялись. С++зарекомендовал себя с лучшей стороны, и я бы порекомендовал его как для начинающихпрограммистов так и для профессионалов.


6. СПИСОК ИСПОЛЬЗОВАННЫХИСТОЧНИКОВ

1.   Эффективная работа: Visual C++. Net.– СПб.: Питер, 2002. – 816 с.: ил.

2.   C++, Объективно – ориентированноепрограммирование: Практикум. – СПб.: Питер, 2004. – 265 с.: ил.

3.   C/C++. Программирование на языкевысокого уровня – СПб.: Питер, 2005. – 461 с.: ил.

4.   Круглински Д.Д., Уингоу С., Шеферд Д.Программирование на Microsoft Visual C++ 6.0: Пер. с англ..-СПб.- М. Харьков — Минск: Питер; Русская редакция, 2000.-821 с.: ил. + CD-ROM.


7. ПРИЛОЖЕНИЕ

Файл EDitApp.cpp. Этот файл является основным файлом приложения.Онвключает в себя определение класса CEditApp.

#include «stdafx.h»

#include «EditApp.h»

#include «MainFrm.h»

#include «ChildFrm.h»

#include «EditAppDoc.h»

#include «EditAppView.h»

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// CEditAppApp

BEGIN_MESSAGE_MAP(CEditAppApp, CWinApp)

         ON_COMMAND(ID_APP_ABOUT, &CEditAppApp::OnAppAbout)

         // Standard file based document commands

         ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)

         ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen)

         // Standard print setup command

         ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinApp::OnFilePrintSetup)

END_MESSAGE_MAP()

// CEditAppApp construction

CEditAppApp::CEditAppApp()

{

         // TODO: add construction code here,

         // Place all significant initialization in InitInstance

}

// The one and only CEditAppApp object

CEditAppApp theApp;

// CEditAppApp initialization

BOOL CEditAppApp::InitInstance()

{

         // InitCommonControlsEx() is required on Windows XP if anapplication

         // manifest specifies use of ComCtl32.dll version 6 or later toenable

         // visual styles. Otherwise, any window creation will fail.

         INITCOMMONCONTROLSEX InitCtrls;

         InitCtrls.dwSize = sizeof(InitCtrls);

         // Set this to include all the common control classes you wantto use

         // in your application.

         InitCtrls.dwICC = ICC_WIN95_CLASSES;

         InitCommonControlsEx(&InitCtrls);

         CWinApp::InitInstance();

         // Initialize OLE libraries

         if (!AfxOleInit())

         {

                   AfxMessageBox(IDP_OLE_INIT_FAILED);

                   return FALSE;

         }

         AfxEnableControlContainer();

         // Standard initialization

         // If you are not using these features and wish to reduce thesize

         // of your final executable, you should remove from thefollowing

         // the specific initialization routines you do not need

         // Change the registry key under which our settings are stored

         // TODO: You should modify this string to be somethingappropriate

         // such as the name of your company or organization

         SetRegistryKey(_T(«Local AppWizard-GeneratedApplications»));

         LoadStdProfileSettings(4); // Load standard INI file options(including MRU)

         // Register the application's document templates. Document templates

         // serve as the connection between documents, frame windows andviews

         CMultiDocTemplate* pDocTemplate;

         pDocTemplate = new CMultiDocTemplate(IDR_EditAppTYPE,

                   RUNTIME_CLASS(CEditAppDoc),

                   RUNTIME_CLASS(CChildFrame), // custom MDI child frame

                   RUNTIME_CLASS(CEditAppView));

         if (!pDocTemplate)

                   return FALSE;

         AddDocTemplate(pDocTemplate);

         // create main MDI Frame window

         CMainFrame* pMainFrame = new CMainFrame;

         if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))

         {

                   delete pMainFrame;

                  return FALSE;

         }

         m_pMainWnd = pMainFrame;

         // call DragAcceptFiles only if there's a suffix

         // In an MDI app, this should occur immediately after settingm_pMainWnd

         // Parse command line for standard shell commands, DDE, fileopen

         CCommandLineInfo cmdInfo;

         ParseCommandLine(cmdInfo);

         // Dispatch commands specified on the command line. Will returnFALSE if

         // app was launched with /RegServer, /Register, /Unregserver or/Unregister.

         if (!ProcessShellCommand(cmdInfo))

                   return FALSE;

         // The main window has been initialized, so show and update it

         pMainFrame->ShowWindow(m_nCmdShow);

         pMainFrame->UpdateWindow();

         return TRUE;

}

// CAboutDlg dialog used for App About

class CAboutDlg: public CDialog

{

public:

         CAboutDlg();

// Dialog Data

         enum { IDD = IDD_ABOUTBOX };

protected:

         virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDVsupport

// Implementation

protected:

         DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg(): CDialog(CAboutDlg::IDD)

{

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

         CDialog::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

END_MESSAGE_MAP()

// App command to run the dialog

void CEditAppApp::OnAppAbout()

{

         CAboutDlg aboutDlg;

         aboutDlg.DoModal();

}

// CEditAppApp message handlers

Первая карта сообщений (конструкция BEGIN_MESSAGE_MAP

END_MESSAGE_MAP)принадлежит классуСEditApp. Вней сообщения с индетификатором ID_APP_ABOUT,ID_FILE_NEW, ID_FILE_OPEN,

ID_FILE_PRINT_SETUPсвязываются соответственно с обработчиками OnAppAbout(), CWinApp::OnFileNew(), CWinApp::OnFileOpen(),CWinApp::OnFilePrintSetup(). В этом файле реализуется конструктор класса СEditApp, а также его методы OnAppAbout() и InitInstance().

Файл MainFrm.cpp. Этот файл содержит реализацию класса CMainFrame, которой порождается от класса CFrameWnd и управляет всеми дочерними MDI-окнами.

#include «stdafx.h»

#include «EditApp.h»

#include «MainFrm.h»

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)

         ON_WM_CREATE()

END_MESSAGE_MAP()

static UINT indicators[] =

{

         ID_SEPARATOR, // status line indicator

         ID_INDICATOR_CAPS,

         ID_INDICATOR_NUM,

         ID_INDICATOR_SCRL,

};

// CMainFrame construction/destruction

CMainFrame::CMainFrame()

{

         // TODO: add member initialization code here

}

CMainFrame::~CMainFrame()

{

}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

         if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)

                   return -1;

        

         if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |WS_VISIBLE | CBRS_TOP

                   | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY |CBRS_SIZE_DYNAMIC) ||

                   !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

         {

                   TRACE0(«Failed to create toolbar\n»);

                   return -1; // fail to create

         }

         if (!m_wndStatusBar.Create(this) ||

                   !m_wndStatusBar.SetIndicators(indicators,

                    sizeof(indicators)/sizeof(UINT)))

         {

                   TRACE0(«Failed to create status bar\n»);

                   return -1; // fail to create

         }

         // TODO: Delete these three lines if you don't want the toolbarto be dockable

         m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

         EnableDocking(CBRS_ALIGN_ANY);

         DockControlBar(&m_wndToolBar);

         return 0;

}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)

{

         if( !CMDIFrameWnd::PreCreateWindow(cs) )

                   return FALSE;

         // TODO: Modify the Window class or styles here by modifying

         // the CREATESTRUCT cs

         return TRUE;

}

// CMainFrame diagnostics

#ifdef _DEBUG

void CMainFrame::AssertValid() const

{

         CMDIFrameWnd::AssertValid();

}

void CMainFrame::Dump(CDumpContext& dc) const

{

         CMDIFrameWnd::Dump(dc);

}

#endif //_DEBUG

// CMainFrame message handlers

В массиве indicators перечислены идентификаторы полейстроки состояния, которые служат индикаторами нажатия некоторых клавиш.Добавление в окно приложения панели инструментов и строки состоянияпроизводится выделенным полужирным шрифтом. Функции-члены AssertValid() и

Dump() используют объявления содержащиесяродительском классе. Класс

CMainFrameизначально не имеет обработчиков сообщений.

Файл EditAppDoc.cpp. Этот файл содержит реализацию класса CEditAppDoc, Который управляет работой сконкретными документами, а также обеспечивает загрузку и сохранение файлов.

#include «stdafx.h»

#include «EditApp.h»

#include «EditAppDoc.h»

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// CEditAppDoc

IMPLEMENT_DYNCREATE(CEditAppDoc, CDocument)

BEGIN_MESSAGE_MAP(CEditAppDoc, CDocument)

END_MESSAGE_MAP()

// CEditAppDoc construction/destruction

CEditAppDoc::CEditAppDoc()

{

         // TODO: add one-time construction code here

}

CEditAppDoc::~CEditAppDoc()

{

}

BOOL CEditAppDoc::OnNewDocument()

{

         if (!CDocument::OnNewDocument())

                   return FALSE;

         // TODO: add reinitialization code here

         // (SDI documents will reuse this document)

         return TRUE;

}

// CEditAppDoc serialization

void CEditAppDoc::Serialize(CArchive& ar)

{

         // CEditView contains an edit control which handles allserialization

         reinterpret_cast<CEditView*>(m_viewList.GetHead())->SerializeRaw(ar);

}

// CEditAppDoc diagnostics

#ifdef _DEBUG

void CEditAppDoc::AssertValid() const

{

         CDocument::AssertValid();

}

void CEditAppDoc::Dump(CDumpContext& dc) const

{

         CDocument::Dump(dc);

}

#endif //_DEBUG

// CEditAppDoc commands

Некоторыеметоды класса CEditAppDoc могут применяться для поддержкисамых необходимых операций работы с документами. В функции OnNewDocument() используются эта же функция изродительского класса

<CEditView*>(m_viewList.GetHead())->SerializeRaw(ar);

Эта строка кодаподдерживает работу команд меню File,обеспечивающих создание, открытие и сохранение файлов. Функции-члены AssertValid() и

Dump() используютописание, предлагаемое родительским классом.

Файл CEditAppView.cpp. Этот файл содержит реализацию класса CEditAppView, который порождается от класса CEditView и управляет отображением документа.

#include «stdafx.h»

#include «EditApp.h»

#include «SeekDialog.h»

#include «EditAppDoc.h»

#include «EditAppView.h»

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// CEditAppView

IMPLEMENT_DYNCREATE(CEditAppView, CEditView)

BEGIN_MESSAGE_MAP(CEditAppView, CEditView)

         // Standard printing commands

         ON_COMMAND(ID_FILE_PRINT, &CEditView::OnFilePrint)

         ON_COMMAND(ID_FILE_PRINT_DIRECT, &CEditView::OnFilePrint)

         ON_COMMAND(ID_FILE_PRINT_PREVIEW,&CEditView::OnFilePrintPreview)

         ON_COMMAND(ID_SEEK, &CEditAppView::OnSeek)

END_MESSAGE_MAP()

// CEditAppView construction/destruction

CEditAppView::CEditAppView()

{

         // TODO: add construction code here

}

CEditAppView::~CEditAppView()

{

}

BOOL CEditAppView::PreCreateWindow(CREATESTRUCT& cs)

{

         // TODO: Modify the Window class or styles here by modifying

         // the CREATESTRUCT cs

         BOOL bPreCreated = CEditView::PreCreateWindow(cs);

         cs.style &= ~(ES_AUTOHSCROLL|WS_HSCROLL);         // Enableword-wrapping

         return bPreCreated;

}

// CEditAppView printing

BOOL CEditAppView::OnPreparePrinting(CPrintInfo* pInfo)

{

         // default CEditView preparation

         return CEditView::OnPreparePrinting(pInfo);

}

void CEditAppView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)

{

         // Default CEditView begin printing

         CEditView::OnBeginPrinting(pDC, pInfo);

}

void CEditAppView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)

{

         // Default CEditView end printing

         CEditView::OnEndPrinting(pDC, pInfo);

}

// CEditAppView diagnostics

#ifdef _DEBUG

void CEditAppView::AssertValid() const

{

         CEditView::AssertValid();

}

void CEditAppView::Dump(CDumpContext& dc) const

{

         CEditView::Dump(dc);

}

CEditAppDoc* CEditAppView::GetDocument() const // non-debug version isinline

{

         ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEditAppDoc)));

         return (CEditAppDoc*)m_pDocument;

}

#endif //_DEBUG

// CEditAppView message handlers

void CEditAppView::OnSeek()

{

         // TODO: Add your command handler code here

         CSeekDialog dlg(this);

if( dlg.DoModal() == IDOK){

FindText( dlg.m_Sample);

}

}

Класс CEditAppView управляет печатьюдокументов с помощью функцийOnPreparePrinting(), OnBeginPrinting(),OnEndPrinting(). Выделенный полужирным шрифтом тектсотвечает за поиск слов в тексте.

еще рефераты
Еще работы по информатике, программированию