Программирование >>  Процедурные приложения 

1 ... 124 125 126 [ 127 ] 128 129 130 ... 150


CDialog::DoDataExchange(pDX); {(AFX DATA MAP(CAboutDlg)

/ / } } AFX DATA MAP (

BEGIN MESSAGE MAP (CAboutDlg, CDialog) ( {AFX MSG MAP (CAboutDlg)

Обработчики сообщений отсутствуют

}}AFX MSG MAPEND MESSAGE MAP( )

Функция, управляющая выводом окна About void CEditorApp : : OnAppAbout ( )

CAboutDlg aboutDlg; aboutDlg . DoModal ( ) ;

Другие функции класса CEditorApp

Первая схема сообщений принадлежит классу CEditorApp. В ней сообщения с идентификаторами id app about, id file new, id file openи id file PRINT SETUPсвязываются соответственно с обработчиками OnAppAbout( ) , CWin-Арр: :OnFileNew() , CWinApp: :OnFileOpen() И CWinApp: :OnFilePrintSetup() . В этом файле реализуются конструктор класса CEditorApp, а также его методы Initlnstance() И OnAppAbout().

Единственное изменение, внесенное нами в сгенерированный текст программы, - это переустановка цвета фона и цвета текста всех диалоговых окон, создаваемых программой.

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

Регистрация шаблонов документов CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate ( IDR EDITORTYPE, RUNTIME CLASS (CEditorDoc) ,

RUNTIME CLASS (CChildFrame) , пользовательское дочернее MDI-окно

RUNTIME CLASS (CEditorView) ) ; AddDocTemplate (pDocTemplate} ;

Диалоговое окно About принадлежит классу CAboutDlg, являющемуся, как и в предыдущем примере, потомком класса CDialog. У него имеется схема сообщений, конструктор И метод DoDataExchange( ) .

Файл MAINFRM.CPP

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

MainFrm.cpp: реализация класса CMainFrame

#include stdafx.h #include Editor, h #include MainFrra.h

lifdef DEBOG #define new DEBDG NEW

#undef THIS FILE

static char THIS FILE[] = FILE ;

#endif

CMainFrame

IMPLEMENT DYNAMIC (CMainFrame, CMDIFrameWnd) BEGIN MESSAGE MAP (CMainFrame, CMDIFrameWnd) { (AFX MSG MAP (CMainFrame)



ON WM CREATE ( )

}}AFX MSG MAP END MESSAGE MAP ( ) static UINT indicators!] =

ID SEPARATOR, поля строки состояния

ID IKDICATOR CAPS , ID INDICATOR NUM , ID INDICATOR SCRL ,

Конструктор и деструктор класса CMainFrame CMainFrame::CMainFrame()

CMainFrame :: --CMainFrame ()

int CMainFrame: :OnCreate (LPCREATESTRUCT IpCreateStruct) {

if (CMDIFrameWnd: :OnCreate (IpCreateStruct) == -1) return -1;

if (!m wndToolBar.CreateEx(this, TBSTYLE FLAT, WS CHILD

WS VISIBLE CBRS TOP CBRS GRIPPER CBRS TOOLTIPS CBRSJFLYBY

CBRS SIZE DYNAMIC) ! m wndToolBar . LoadToolBar { IDR MAINFRAME) )

<

TRACED ( Failed to create toolbarXn ) ;

return-1; не удалось создать панель инструментов

if (!m wndStatusBar.Create(this) !m wndStatusBar.Setlndicators(indicators, sizeof(indicators)/sizeof(UINT))) {

TRACED( Failed to create status bar\n ); return -1; не удалось

создать строку состояния

m wndToolBar . EnableDocking (CBRS ALIGN ANY) ;

EnableDocking(CBRS ALIGN ANY) ; DockControlBar (Sm wndToolBar) ; return 0; }

BOOL CMainFrame: : PreCreateWindow (CREATESTRUCT Ses) ( if(! CMDIFrameWnd: : PreCreateWindow (cs)) return FALSE; return TRUE;

Диагностика класса CMainFrame #ifdef DEBUG

void CMainFrame::AssertValid() const

CMDIFrameWnd::AssertValid();

void CMainFrame::Dump(CDumpContext &dc) const CMDIFrameWnd::Dump(dc); } #endif DEBUG

Обработчики сообщений класса CMainFrame

Заметьте, что в схему сообщений добавлен обработчик сообщений wm create. Обратите также внимание на этот небольшой фрагмент:

static UINT indicators[] =

ID SEPARATOR, поля строки состояния

ID INDICATOR CAPS,

ID INDICATOR NUM,



ID INDICATOR SCRL,

Как вы помните, в одном из окон мастера AppWizard была задана возможность добавления в окно приложения строки состояния. В массиве indicators перечислены идентификаторы различных полей строки состояния, которые служат индикаторами нажатия клавиш [CapsLock], [NumLock] и [ScrollLock].

Файл EDITORDOC.CPP

Файл EDITORDOC.CPPсодержит реализацию класса CEditorDoc, который управляет работой с конкретным документом, а также обеспечивает загрузку и сохранение данных документа.

EditorDoc.cpp: реализация класса CEditorDoc

#include stdafx.h

#include Editor.h

#include EditorDoc.h

#ifdef DEBUG Idefine new DEBDG NEW

#undef THIS FILE

static char THIS FILE[]= FILE ; #endif

CEditorDoc

IMPLEMENT DYNCREATE (CEditorDoc, CDocument) BEGIN MESSAGE MAP (CEditorDoc, CDocument) { (AFX MSG MAP (CEditorDoc) )}AFX MSG MAP END MESSAGE MAP ( )

Конструктор и деструктор класса CEditorDoc

CEditorDoc: : CEditorDoc ()

CEditorDoc::-CEditorDoc()

BOOL CEditorDoc: : OnNewDocument () {

if ( ! CDocument : : OnNewDocument ( ) ) return FALSE; return TRUE;

Сериализация класса CEditorDoc void CEditorDoc::Serialize(CArchive &ar) ( ((CEditView*)m viewList.GetHead())->SerializeRaw(ar);

Диагностика класса CEditorDoc #ifdef DEBUG

void CEditorDoc: :AssertValid()const { CDocument : :AssertValid() ; )

void CEditorDoc: : Dump (CDumpContext &dc) const { CDocument : : Dump (dc); } #endif DEBOG

Другие функции класса CEditorDoc

Строка функции Serialize(), выделенная полужирным шрифтом, поддерживает работу команд-меню FUe, обеспечивающих создание, открытие и сохранение файлов.

Файл EDITORV1EW.CPP



1 ... 124 125 126 [ 127 ] 128 129 130 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.059
При копировании материалов приветствуются ссылки.
Яндекс.Метрика