Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
CDocument* CView:: GetDocument()
Содержание книги
- Система, управляемая сообщениями
- 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 – элемент представляет собой горизонтальную разделительную линию
- Object IDs:-> IDM_SOLVE_CONV.
- Шаблон диалога, хранящийся в файле ресурсов, описывает форму, размер и расположение на экране блока диалога и каждого из его внутренних элементов управления.
- CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/)
CDocument* CView:: GetDocument()
Генерируя класс, производный от CView, AppWizard создает новую версию этого метода, возвращающую указатель на объект производногоо класса.
После того как представление было впервые присоединено к документу, но до его первоначального отображения (при запуске приложения или выборе команд New или Open в меню File) вызывается
virtual void CView::OnInitialUpdate()
В базовом классе CView она просто вызывает OnUpdate (см. далее).
После того, как документ был модифицирован, в объекте класса CDocument вызывается метод CDocument::UpdateAllViews, запускающий в соответствующих представлениях методы
virtual void CView::OnUpdate(CView *pSender, // Идентифицирует
// представление, которое обновило документ
LPARAM lHint, // некоторая информация о характере
CObject * pHint) // изменений в документе
Реализация этой функции по умолчанию помечает всю рабочую область как недействительную с целью перерисовки ее при получении следующего сообщения WM_PAINT. Представление, указанное в первом аргументе не обновляется. Если pSender=NULL, то обновляются любое представление, где запускается этот метод. Первый аргумент предназначен для пропуска уже обновленного представления в процессе обновления всех представлений изменившегося документа, например, при выполнении функции CDocument::UpdateAllViews.
Для изображения содержимого документа иcпользуется чисто виртуальная функция
virtual void CView::OnDraw(CDC *pDC)
Она отвечает за отображение на экране, печать и предварительный просмотр документа. pDC указывает на контекст устройства, на котором будет отображаться представление документа (это может быть экран, принтер или память).
Выбрав в качестве базового класса для представлений в нашем каркасе класс CEditView (см. Шаг 6 создания приложения Optimizer), мы обеспечили для пользователя возможности ввода и редактирования текста, а также работу с буфером обмена. CEditView не является потомком элемента управления CEdit (множественное наследование здесь не применяется), однако содержит большинство его методов и работает с текстом аналогичным образом. Эти классы имеют и общие ограничения:
· не поддерживают редактирование по принципу «что вижу, то и получаю» WYSIWYG,
· может изображать текст только одним шрифтом и не поддерживает специального форматирования символов,
· размер текста, который может содержать объект класса CEditView, ограничен 64Кб.
Строго говоря, в классе CEditView мы видим пример нарушения принципа разделения данных документа и их представления, т.к. текст здесь постоянно хранятся в поле представления, хотя теоретически представление не должно иметь никакого отношения к хранению данных.
Класс документа
Данные документа определяются в произвольной форме, как переменные класса, производного от CDocument. “Жизненный цикл” документа в MDI-приложении:
|