Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
Архитектура «Документ-представление» и MDI-приложения
Содержание книги
- Принципы поиска ошибок при тестировании
- Проверка в нормальных условиях предполагает тестирование на данных, которые характерны для реальных условий функционирования программы.
- Дж. Шеферд. Программирование на Microsoft VIsual C++. Net
- Система, управляемая сообщениями
- By byte (8-битовое целое без знака)
- h дескриптор (handle) - обычно DWORD
- quot;SubSystem"->"/SUBSYSTEM:WINDOWS" или "/SUBSYSTEM:CONSOLE"
- Include "windows. H". Lresult callback windowproc(. Lparam lparam). Paintstruct PS;. HDC hdc;. Char lpszhello[]="hello, World. ";. Switch (wmessage). HDC = beginpaint(hwnd, &ps);. Rect RT;. Getclientrect(hwnd, &rt);. Amp;rt,dt_
- Подготавливаем данные класса окна и регистрируем его
- LPARAM lParam; // конкретный смысл которой зависит от
- Регистрация класса окна и Создание окна
- BOOL InitInstance(HINSTANCE hInstance, int nCmdShow,
- Оконная процедура регистрируется в системе и вызывается всякий раз, когда Windows выполняет какую-либо операцию над окном приложения.
- GetClientRect(hWnd, &rt);. DrawText(hdc,lpszHello,strlen(lpszHello),&rt,DT_LEFT);. EndPaint(hWnd, &ps);. case WM_DESTROY: PostQuitMessage(0); break;. return DefWindowProc(hWnd,wMessage,wParam,lParam);. return 0;
- Общие сведения о сообщениях Win32
- Аппаратные (входные данные от мыши, клавиатуры и таймера);
- Список (list Box) –элемент отображения списка элементов, позволяющий пользователю выбрать один или несколько из них.
- пиктограммы (icons) – битовые массивы, использующиеся для визуального представления различных объектов в системе.
- CCmdTarget - базовый класс для всех объектов, которые могут получать и отправлять сообщения.
- Шаг2. Выбираем «An empty project»
- Макросы-компоненты карты сообщений
- afx_msg void OnLButtonUP(UINT nFlags, CPoint point);
- Nmhdr *pnotifystruct, //указатель на структуру с данными
- Посылает сообщение в объект класса cwnd или его потомка, непосредственно вызывая оконную процедуру, и не выходит из нее, пока та не обработает сообщение;
- strMessageText.Format("Error number %d", nError);
- Архитектура «Документ-представление» и MDI-приложения
- HMENU CMDIChildWnd::m_hMenuShared
- дескриптор меню, ассоциированного с окном “MDI child”.
- CDocument* CView:: GetDocument()
- Динамическое создание с помощью конструктора
- virtual POSITION CDocument::GetFirstViewPosition()
- Класс шаблона cdoctemplate в приложении отвечает за взаимодействие документов, их представлений и фреймов. В MDI приложении используется его потомок cmultidoctemplate.
- CMultiDocTemplate* pDocTemplate;
- CFrameWnd* pFrame,CDocument* pDoc, BOOL bMakeVisible=TRUE);
- POSITION CWinApp::GetFirstDocTemplatePosition()
- Документ, связанный с активным представлением
- AFX_THREADPROC pfnThreadProc, // Глобальная функция потока
- UINT Msg, // идентификатор сообщения
- Solver* pSolver; //Solver to use
- virtual CDocument* CFrameWnd::GetActiveDocument()
- SendMessage(WM_COMMAND,ID_FILE_SAVE,0);
- while (::GetMessage(&msg, NULL,0,0))
- Объекты, объявленные как volatile, не подвержены оптимизации и временному хранению в регистрах, но читаются и записываются каждый раз напрямую в память.
- if (!m_thisThreadParams.pResults) return 1;
- if (m_thisThreadParams.pResults)
- ID_SEPARATOR, // status line indicator
- m_wndStatusBar.SetPaneText(1,"");
- TODO: Add your message handler code here
- Нажимаем на элементе “решить” мышку и переносим его на место между пунктами ”window” и ”help” (для порядка).
- Separator – элемент представляет собой горизонтальную разделительную линию
Мастер AppWizard
AppWizard используется для создания каркаса приложения на основе библиотеки MFC. Для генерации приложения, представляющего собой исполняемый файл, выполните следующие шаги: File->New-> Projects->MFC AppWizard (exe), укажите имя нового проекта (Project Name) и каталог, где он будет находиться. Пусть наш проект называется «Optimizer».
Настройка проекта осуществляется за 6 шагов:
На шаге 1 может быть выбран тип главного окна приложения: с поддержкой одно- или многодокументного интерфейса (Single document или Mutiple documents), или базирующегося на блоке диалога (Dialog based). Кроме того, можно выбрать язык, который будет использоваться в приложении. Нам нужно выбрать Mutiple documents. Подробнее об архитектуре приложения MDI, которая соответствует данному выбору будет рассказано в следующих лекциях.
На шаге 2 определяется возможность работы с базами данных. Нам нужно выбрать None, т.к. мы не собираемся работать с базами данных в нашем проекте.
На шаге 3 определяется возможность поддержки OLE. Нам нужно выбрать None, т.к. мы не собираемся включать в наш проект поддержку OLE.
На шаге 4 определяются стандартные возможности, которые AppWizard должен включить в приложение. Среди них флаги:
· Docking toolbar определяет нужно ли создавать панель инструментов(по умолчанию эта панель содержит кнопки для создания нового документа, открытия и сохранения файлов, вырезания, копирования, вставки, печати и вызова справки).
· Initial status bar определяет будет ли главное окно приложения иметь строку состояния(находится внизу главного окна и содержит автоматические индикаторы клавиш <Caps Lock>, <Num Lock> и <Scroll Lock>, а также строку отображения информации о командах меню и кнопках панели инструментов).
· Printing and Print Preview требует генерации кода для печати, настроек печати и предварительного просмотра.
· Context-sensitive Help генерирует набор файлов, которые используются для контекстно-зависимой справки(т.е. справки, отвечающей элементу интерфейса, который находится в фокусе в момент вызова справки).
· И другие флаги(нам они не будут интересны).
Кроме того, на шаге 4 имеется кнопка Advanced, открывающая окно тонкой настройки работы с файлами и стилей окон приложения.
На шаге 4 нам подходят все настройки по умолчанию, кроме флага Context-sensitive Help (его нужно включить) и расширения для используемых в проекте файлов:
Advanced->File extention -> “dat”
Шаг 5 позволяет определить нужны ли нам встроенные комментарии, а также выбрать тип используемой библиотеки. Принимаем значения по умолчанию.
Шаг 6 позволяет изменить имена файлов и классов, генерируемые AppWizard, а также изменить базовые классы, на которых будет построен каркас приложения. Здесь следует выбрать COptimizerView в верхнем списке и, затем, CEditView в списке Base Class. Таким образом, мы требуем создавать внутри всех дочерних окон приложения окна текстового редактора.
Полученный в результате каркас приложения (после компиляции) будет представлять собой простой многооконный текстовый редактор или, говоря языком MFC, MDI-приложение с поддержкой редактирования текстовых документов.
В дальнейшем мы изучим архитектуру «Документ-представление» и MDI-приложения.
|