Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
Документ, связанный с активным представлением
Содержание книги
- Регистрация класса окна и Создание окна
- 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 "&Начальная точка:".
- Имя этого класса должно обязательно (. ) соответствовать вашему методу решения задачи выпуклой оптимизации. Иначе задача на практике приниматься не будет.
- class CMyDialog : public CDialog
- BOOL cwnd::updatedata( BOOL bsaveandvalidate = TRUE )
- void CMyDialog::DoDataExchange(CDataExchange* pDX)
- Vs2005: правой кнопкой на элементе -> Add variable)
1. Активное представление
2. Документ, связанный с активным представлением
3. Дочерний фрейм, содержащий активное представление
4. Главный фрейм
5. Приложение
Создание потоков и простейшая синхронизация
Рассмотрим кратко механизмы создания потоков и простейшие способы синхронизировать их действия. (Можно было бы отложить эту тему на более позднее время, но мы перейдем к ней сейчас, чтобы вы могли начать программировать и отлаживать свои проекты как можно скорее.)
В процессе могут порождаться дополнительные потоки, когда нужно выделить фоновые процессы, выполнение которых необходимо для правильной работы приложения, но пользователю нет необходимости дожидаться их окончания для продолжения работы с приложением.
Например, предположим что одна из функций-обработчиков сообщений окажется «жадной» и займет 10 секунд процессорного времени. Благодаря вытесняющей многозадачности в Win32 другие приложения все это время будут продолжать работать, отнимая процессор у «жадной» функции время от времени. Однако, поток, содержащий данную функцию в течении 10 секунд не будет обрабатывать никакие сообщения, т.к. DispatchMessage не возвращает управление до тех пор, пока его не возвратит «жадный» обработчик. Данную проблему можно разрешить, запустив «жадную» функцию в отдельном потоке.
Функция потока и связь с ней
В Win32 бывают потоки двух видов: потоки пользовательского интерфейса (у которых есть свой цикл обработки сообщений) и рабочие потоки (у которых этого цикла нет). Мы создадим рабочий поток (без обработки событий).
Для нового потока нужно написать глобальную функцию, которая принимает в качестве параметра одно 32-разрядное значение, объявленное как LPVOID, и при запуске через этот параметр можно передать указатель на все, что угодно. Возвращать функция обязана значение типа UINT, но мы им не будем пользоваться. Поток завершится, когда глобальная функция вызовет return. Чтобы запустить поток нужно вызвать функцию MFC, имеющую следующий вид(в действительности имеется еще 4 параметра, которые мы принимаем по умолчанию):
CWinThread* AfxBeginThread(
|