|
Программирование >> Процедурные приложения
Работа с мастером AppWizardдостаточно подробно рассматривалась в предыдущей главе. Поэтому сейчас мы сконцентрируем внимание лишь на наиболее важных моментах создания приложения Cnt. Чтобы приступить к созданию нового проекта, выберите в окне компилятора MicrosoftVisualC++ в меню File командуNew. В окне Newвыберите элемент MFC AppWizard(exe), в результате чего будет запущен мастер приложений, работа с которым осуществляется в шесть этапов. 1. В первом окне установите опцию Singledocument. 2. Во втором окне не задавайте поддержку баз данных. 3. В третьем окне установите опцию Container, указывающую на то, что приложение будет OLE-контейнером. В этом же окне следует включить поддержку элементов управления ActiveX. 4. В следующем, четвертом, окне необходимо оставить все опции, заданные по умолчанию. 5. В пятом окне установите опцию MFC Standard, опцию включения комментариев в программу и опцию статической компоновки библиотеки MFC . 6. Наконец, в шестом окне, просмотрите список классов, которые будут созданы автоматически, и щелкните на кнопке Finish. Мастер приложений отобразит окно с отчетом о сделанных установках. Если все правильно, щелкните на кнопке ОК, с тем чтобы запустить процесс генерации кода нового приложения. Теперь осталось только построить исполняемый файл приложения, выбрав для этого в меню Build команду Rebuild All. В результате в папку DEBUG будет добавлен файлСМТ.ЕХЕ. Анализ программного кода Приложение включает пять основных исходных файлов, сгенерированных мастером AppWizard: CNT.CPP, MAINFRM.CPP, CNTDOC.CPP, CNTVIEW.CPP и CNTRITEM.CPP. Файл CNT.CPP Текст, содержащийся в файле CNT.CPP, почти идентичен тексту файлов GRAPH.CPP и EDITOR.CPP приложений Graphи Editor, описанных в предыдущей главе. Поэтому рекомендуем вам вернуться к той главе и еще раз прочитать пояснения к указанным файлам. Листинг файла CNT.CPP показан ниже. Cnt.cpp: определяет работу приложения. #include stdafx.h #include Cnt.h #include MainFrm.h #include CntDoc.h #include CntView.h #ifdef DEBUG #define new DEBUG NEW #undef THIS FILE static char THIS FILE[] = FILE ; #endif
CCntApp BEGIN MESSAGE MAP {CCntApp, CWinApp) {(AFX MSG MAP (CCntApp) ON COMMAND(ID APP ABOUT, OnAppAbout) ПРИМЕЧАНИЕ: мастер классов будет добавлять и удалять здесь макросы схемы сообщений. НЕ РЕДАКТИРУЙТЕ то, что здесь находится. }}AFX MSG MAP Стандартные операции с документами ON COMMAND(ID FILE NEW, CWinApp :: OnFileNew) ON COMMAND(ID FILE OPEN, CWinApp: :OnFileOpen) Стандартная команда задания установок принтера ON COmAND(ID FILE PRINT SETUP, CWinApp: :OnFilePrintSetup) END MESSAGE MAP()
КонструкторклассаCCntApp CCntApp::CCntApp() { TODO: здесь добавьте код конструктора. Все наиболее важные команды инициализации разместите в методе Initlnstance. } Единственн1й объект класса CCntAppCCntApptheApp;
Инициализация класса CCntApp BOOLCCntApp::Initlnstance() { Инициализация библиотек OLE if(!Afx01eInit() ) AfxMessageBox(IDP OLE INIT FAILED); return FALSE; } AfxEnableControlContainer (); Стандартнаяинициализация. Если вам не нужны используемые здесь возможности и вы хотите сократить размер исполняемого файла, удалите ненужные команды. tifdef AFXDLL Enable3dControls(); эта функция вызывается при динамической компоновке MFC #else Enable3dControlsStatic(); эта функция вызывается при статической компоновке MFC #endif Измените раздел реестра, где будут храниться параметры программы. SetRegistryKey( T( Local AppWizard-Generated Applications )); LoadStdProfileSettings(); загрузка параметров из INI-файла Регистрация шаблонов документов приложения CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate ( IDR MAINFRAME, RUNTIME CLASS (CCntDoc) , RUNTIME CLASS (CMainFrame) , основное SDI-окно RUNTIME CLASS (CCntView) ) ; pDocTemplate->SetContainer!nfo(IDR CNTR INPLACE) ; AddDocTemplate (pDocTemplate) ; Анализ командной строки на предмет поиска системных команд, DDE-команд или команд открытия файлов. CCommandLinelnfo cmdlnfo; ParseCommandLine (cmdlnf о) ; Обработка команд, указанных в командной строке if ( ! ProcessShellCommand (cmdlnfo) ) return FALSE; Отображение окна приложенияm pMainWnd->ShowWindow (SW SHOW) ; m pMainWnd->UpdateWindow() ; return TRUE;
Класс CAboutDlg, управляющий окном About class CAboutDlg : public CDialog { public: CAboutDlg ( ) ; Данные диалогового окна {{AFX DATA (CAboutDlg) enum { IDD = IDD ABOUTBOX }; }}AFX DATA Виртуальные функции, сгенерированные мастером ClassWizard {{AFX VIRTUAL (CAboutDlg) protected: virtual void DoDataExchange (CDataExchange* pDX) ; })AFX VIRTUAL Реализация protected: { { AFX MSG (CAboutDlg) Обработчики сообщений отсутствуют })AFXMSG DECLARE MESSAGE MAP() CAboutDlg: : CAboutDlg () : CDialog (CAboutDlg: : IDD) { {fAFX DATA INIT (CAboutDlg) }}AFX DATA INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { 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 CCntApp::OnAppAbout() CAboutDlg aboutDlg; aboutDlg.DoModal(); }
Другие функции класса CCntApp Данный листинг содержит один фрагмент, заслуживающий особого внимания. В OLE используется концепция непосредственного редактирования (in-placeediting). Это означает, что после двойного щелчка на объекте, внедренном в документ контейнера, такой как наш, строка меню и панели инструментов соответствующего OLE-сервера замещают меню и панели инструментов контейнера. Например, если в документ приложения Cnt будет внедрена электронная таблица Excel, то после двойного щелчка на ней строка меню и панели инструментов программы Excel появятся в окне программы Cnt. Смена меню происходит автоматически и обрабатывается библиотекой MFC с помощью средств OLE. Этот процесс становится возможным благодаря тому, что в приложение добавляется два ресурса меню: idr mainfraimeи idr cntr inplace (имя последнего идентификатора уникально для данного приложения). По умолчанию отображается меню IDR MAINFRAIME. Но когда внедренный объект активизируется для непосредственного редактирования, загружается меню idr cntr in-PLACE. Файл MAINFRM.CPP Опять-таки, текст файла MAINFRM.CPP, по сути, идентичен тексту одноименного файла приложения Editor из предыдущей главы. И мы рекомендуем вам еще раз вернуться к той главе и прочесть комментарии к нему. Но для полноты изложения текст файла все же приведем.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |