- •Методические рекомендации
- •План лекции
- •Интерфейс графического устройства
- •Программирование, основанное на ресурсах
- •Управления памятью
- •Документы и их представление
- •Контрольные вопросы
- •Редактирование функций.
- •Изучение работы приложения.
- •Самостоятельная работа.
- •Добавление своего класса.
- •Домашняя работа.
- •Лекция 2. Основы программирования. Работа с классом Вид. Методические рекомендации:
- •Интерфейс графического устройства
- •Работа с gdi объектами
- •Пример создания нового gdi объекта
- •Режимы преобразования координат
- •Режимы преобразования координат с постоянным масштабом
- •Режимы преобразования координат с переменным масштабом
- •Замечание
- •Координатные пространства mfc
- •Пример использования режимов преобразования координат
- •Работа с окнами, содержащими полосы прокрутки
- •Линейки прокрутки
- •Различные способы прокрутки
- •Прием ввода с клавиатуры
- •Контрольные вопросы
- •Обработка сообщений от мыши.
- •Задание для самостоятельной домашней разработки.
- •Лекция 3. Меню. Панели инструментов и строки состояния Методические рекомендации
- •Меню Windows
- •Обновление командного пользовательского интерфейса
- •Класс cMenu
- •Создание контекстных меню
- •Панели элементов управления и каркас приложений
- •Панель инструментов
- •Растровое изображение панели инструментов
- •Состояния кнопок Любая кнопка может находиться в следующих состояниях
- •Всплывающие подсказки
- •Строка состояния
- •Определение секций в строке состояния
- •Строка сообщений
- •Индикатор состояния
- •Управление строкой состояния
- •Контрольные вопросы:
- •Добавление переменных-членов.
- •Добавление функции OnMouseMove.
- •Программирование команд контекстного меню.
- •Программирование команд главного меню.
- •Домашняя работа.
- •Лекция 4. Диалоговые окна и стандартные элементы управления Методические рекомендации
- •Работа с модальным диалоговым окном
- •Стандартные элементы управления
- •Работа с немодальными диалоговыми окнами
- •Пользовательские сообщения
- •Принадлежность диалогового окна
- •Контрольные вопросы
- •Создание класса “диалогового окна”.
- •Добавление переменных-членов класса вашего диалогового окна.
- •Написание инициализирующего кода
- •Присваивание переменным начальных значений.
- •Самостоятельная работа.
- •Домашнее задание.
- •Лекция 5. Обработка сообщений Windows и программирование многопоточных приложений Методические рекомендации
- •Обработка сообщений в однопоточной программе
- •Передача управления
- •Таймеры
- •Обработка в периоды простоя
- •Программирование многопоточных приложений
- •Функция рабочего потока и запуск потока
- •Общение основного потока с рабочим
- •Общение рабочего потока с основным
- •Синхронизация потоков с использованием событий
- •Блокировка потоков
- •Критические секции
- •Потоки пользовательского интерфейса
- •Контрольные вопросы
- •Домашнее задание.
- •Задание для самостоятельной работы
- •Управление процессом Пример 1.
- •2. Замена образа процеса Пример 2. Использование функции exec.
- •Пример 3. Использование неименованного канала.
- •Пример 4. Создание именованного канал с именем "fifo".
- •3. Сигналы.
- •Пример 5. Использование сигналов.
- •Пример 6. Сообщения.
- •Пример 7. Сообщения.
- •Пример 8. Разделение памяти.
- •Пример 9. Использование семафоров.
- •Пример 10. Создание процесса вWindows.
- •Пример 11. Использование неименованного канала.
- •Пример 12. Использование именованного канала.
- •Пример 13. Использование разделяемой памяти File Mapping.
- •Пример 14. Использование Mailslot.
- •Пример 15. Использование событий.
Добавление переменных-членов.
Добавьте следующие переменные-члены:
Переменная |
Тип |
Описание |
m_lred |
int |
Определяет состояние пункта “Красный” меню “Цвета линий”. Если равна 1 значит пункт выбран, если 0 то нет. |
m_zred |
int |
Определяет состояние пункта “Красный” меню “Цвета заливки”. Если равна 1 значит пункт выбран, если 0 то нет. |
m_lblur |
int |
Определяет состояние пункта “Синий” меню “Цвета линий”. Если равна 1 значит пункт выбран, если 0 то нет. |
m_zblur |
int |
Определяет состояние пункта “Синий” меню “Цвета заливки”. Если равна 1 значит пункт выбран, если 0 то нет. |
m_lgreen |
int |
Определяет состояние пункта “Зеленый” меню “Цвета линий”. Если равна 1 значит пункт выбран, если 0 то нет. |
m_zgreen |
int |
Определяет состояние пункта “Зеленый” меню “Цвета заливки”. Если равна 1 значит пункт выбран, если 0 то нет. |
m_col_l |
int |
Определяет текущий цвет линий |
m_col_z |
int |
Определяет текущий цвет заливки |
mouse_x |
int |
Хранит координату мыши по Х |
mouse_y |
int |
Хранит координату мыши по Y |
После того как Вы добавите переменные, необходимо будет провести их инициализацию. Лучше всего для этого подходит конструктор класса CL3_1View.
CL3_1View::CL3_1View()
{
m_lred=0;
m_zred=0;
m_lblur=0;
m_zblur=0;
m_lgreen=0;
m_zgreen=0;
m_col_l=0;
m_col_z=0;
}
Добавление функции OnMouseMove.
Для того чтобы постоянно получать информацию о координатах мыши, необходимо добавить обработчик сообщения WM_MOUSEMOVE в класс CL3_1View.
// Обработчик сообщения WM_MOUSEMOVE
void CL3_1View::OnMouseMove(UINT nFlags, CPoint point)
{
//Сохраняем координату Х
mouse_x=point.x;
//Сохраняем координату Y
mouse_y=point.y;
//Вызываем функцию базового класса
CView::OnMouseMove(nFlags, point);
}
Программирование команд контекстного меню.
Для того, чтобы создать обработчик пункта меню необходимо при помощи Class Wizard создать обработчик сообщения ON_COMMAND поступающего от этого пункта (Рис. 3.1.5).
Создайте обработчики для всех пунктов контекстного меню в классе CL3_1View.
///////////////////////////////////////////////////////////////
// Обработка контекстного меню //
///////////////////////////////////////////////////////////////
//Рисование квадрата
void CL3_1View::OnMenuKv()
{ //Создаем контекст устройства связанного с
//клиентской областью
CClientDC dc(this);
// Сохраняем текущий контекст
int old=dc.SaveDC();
//Создаем новую кисть и новый карандаш
//в текущем контексте устройства
CBrush newBrush(m_col_z);
CPen newPen(PS_DASHDOT,2,(COLORREF) m_col_l);
//Выбираем созданные кисть и карандаш в
//текущем контексте устройства
dc.SelectObject(&newPen);
dc.SelectObject(&newBrush);
//Рисуем прямоугольник
dc.Rectangle(mouse_x-10,mouse_y-10,mouse_x+10,mouse_y+10);
//Востанавливаем старый контекст устройства
dc.RestoreDC(old);
}
// Рисование элипса
void CL3_1View::OnMenuEl()
{
//Создаем контекст устройства связанного с
//клиентской областью
CClientDC dc(this);
// Сохраняем текущий контекст
int old=dc.SaveDC();
//Создаем новую кисть и новый карандаш
//в текущем контексте устройства
CBrush newBrush(m_col_z);
CPen newPen(PS_DASHDOT,2,(COLORREF) m_col_l);
//Выбираем созданные кисть и карандаш в
//текущем контексте устройства
dc.SelectObject(&newPen);
dc.SelectObject(&newBrush);
//Рисуем элипс
dc.Ellipse(mouse_x-15,mouse_y-10,mouse_x+15,mouse_y+10);
//Востанавливыем старый контекст устройства
dc.RestoreDC(old);}
// Рисование линии
void CL3_1View::OnMenuLine()
{
// Без комментариев
CClientDC dc(this);
int old=dc.SaveDC();
CPen newPen(PS_DASHDOT,2,(COLORREF) m_col_l);
dc.SelectObject(&newPen);
dc.MoveTo(mouse_x-10,mouse_y+10);
dc.LineTo(mouse_x+10,mouse_y-10);
dc.RestoreDC(old);
}