|
Программирование >> Процедурные приложения
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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.059
При копировании материалов приветствуются ссылки. |