Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
virtual POSITION CDocument::GetFirstViewPosition()
Содержание книги
- 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*/)
- правой кнопкой)->Ok->Properties->ID:"IDC_START"
- В правом верхнем углу ставим Static Text "&Начальная точка:".
virtual POSITION CDocument::GetFirstViewPosition()
// возвращает позицию первого из присоединенных представлений
virtual CView* CDocument::GetNextView(POSITION & rPosition)
// возвращает указатель на представление с позицией rPosition
// из списка присоединенных представлений,
// переводит rPosition на следующую позицию (если нет, то на NULL)
Используемый здесь тип POSITION описан в MFC так:
struct __POSITION { int unused; };
typedef __POSITION* POSITION;
Наш выбор CEditView в качестве базового класса для представлений привел к тому, что мастер AppWizard переопределил в нашем классе «документ»его метод ввода-вывода:
void COptimizerDoc::Serialize(CArchive& ar)
{// CEditView contains an edit control which handles all serialization
((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);}
Как видим, ввод-вывод в данном случае по сути взял на себя класс CEditView, что также нарушает основы архитектуры документ-представление. Его метод SerializeRaw «отправляет» содержащийся в окне-представлении текст в файл или из файла.
Допустим, Вам не нужно несколько представлений документа, но необходима поддержка каркаса приложений для работы с файлами. Тогда забудьте о функциях UpdateAllViews и OnUpdate, и придерживайтесь следующей простой схемы.
1. В заголовочном файле производного класса документа, сгенерированном AppWizard, объявите переменные-члены, в которых хранятся основные данные программы. Объявите их открытыми или сделайте производный класс "представление" дружественным классу документа.
2. В производном классе "представление" переопределите виртуальную функцию OnInitialUpdate. Каркас приложеий вызывает ее после инициализации или считывания с диска данных документа. Эта функция должна обновить представление, чтобы оно отражало текущее содержание документа.
3. Напишите требуемые обработчики оконных и командных сообщений и функцию OnDraw в производном классе "представление" так, чтобы они имели доступ к переменным-членам класса "документ", используя для этого функцию GetDocument.
В простейшем случае события будут развиваться в такой последовательности:
1. Запуск программы
2. Создание объекта "документ"
3. Создание объекта "представление"
4. Создание окна представления
5. Вызов OnNewDocument из класса "документ"
6. Вызов OnInitialUpdate из класса "представление", где происходит инициализация "представления", объявление недействительных областей и вызывается OnDraw
7. Пользователь редактирует данные и функции "представления" обновляют переменные-члены класса "документ"
8. Уничтожение объектов "представление" и "документ"
9. Завершение работы программы.
Класс CWinApp уже рассматривался нами, но при этом мы не касались его свойств, связанных с архитектурой «документ/представление». Для того чтобы разобраться с этим вопросом необходимо ввести сначала понятие шаблона документов.
Класс шаблона документов
|