- •Главление
- •Часть 1 Решение уравнения 42
- •Практическое занятие №1 Тема: «Знакомство со средой разработки и элементами управления. Создание диалогового приложения».
- •1. Настройка среды разработки Microsoft Visual Studio 2008 при первом запуске.
- •2. Создание нового проекта.
- •3. Создание диалогового приложения.
- •3.1. Работа с мастером mfc Application Wizard. Шаг 1.
- •3.2. Работа с мастеромMfcApplicationWizard. Шаг 2. Выбор типа приложения.
- •4. Знакомство со средой разработки.
- •5.Создание диалогового окна при помощи визуальных средств разработки.
- •5.1. Знакомство с обозревателем ресурсов и окном свойств объекта. Настройка рабочего языка проектируемого приложения.
- •5.2. Работа с редактором ресурсов. Знакомство со способами удаления и размещения элементов управления в диалоговом окне.
- •5.3. Работа с окном свойств. Настройка свойств выбранных элементов управления.
- •5.4. Настройка внешнего вида диалогового окна.
- •5.5. Подготовка к работе элементов управления.
- •5.6. Выравнивание управляющих элементов и редактирование порядка переключения между элементами управления
- •6. Проверка работоспособности, компиляция и запуск программы
- •7. Связывание программного кода с элементами управления
- •7.1. Связывание переменных с элементами управления. Работа с мастером добавления новой переменной.
- •7.2. Удаление переменной, связанной с элементом управления
- •7.3. Создание обработчика события. Работа с мастером обработки событий.
- •8. Написание программного кода для выполнения вычислений.
- •9. Тестирование разработанного приложения.
- •10. Исправление ошибки, связанной сUnicode.
- •Задания для самостоятельного выполнения
- •Практическое занятие №2. Тема: «Приложения, использующие команды ветвления». Часть 1 Решение уравнения
- •Часть 2 Пример приложения, использующего операторswitch
- •Задание для самостоятельного выполнения
- •Практическое занятие №3 Тема: «Приложения, использующие команды повторения» Часть 1 Приложение, использующее циклwhile
- •Часть 2 Приложение, использующее циклdo-while
- •Часть 3 Отладка программы. Использование оператора trace
- •Приложение, использующее циклfor
- •Часть 4 Погрешность. Понятие погрешности. Проверка полученного значения на соответствие заданной точности.
- •Пример программы, вычисляющей сумму ряда
- •Задания для самостоятельного выполнения
- •Практическое занятие №4. Тема: «Вспомогательные функции. Работа с элементом управления Список(List Box)» Элемент управления «Список»
- •Добавление вспомогательной функции с помощью мастера.
- •Пример 1 Приложение, которое находит дружественные числа на заданном отрезке
- •Пример 2 Программа, которая находит заданное количество чисел, которые равны сумме квадратов двух натуральных чисел
- •Задания для самостоятельного выполнения
- •Практическое занятие №5.
- •Тема: «Работа со строками».
- •Пример 1
- •Программа, которая считывает строку символов, состоящую только из русских букв, точек и пробелов, и увеличивает длину строки, если она меньше заданной, вставляя пробелы между словами
- •Пример 2 Программа, которая считывает строку, содержащую числа, с проверкой допустимости вводимых символов и оставляет по 2 цифры после точки, удаляя остальные цифры дробной части
- •Пример 3 Программа, которая считывает строку символов и создает новую строку, заменяя заданное слово на другое.
- •Задания для самостоятельного выполнения
- •Практическое занятие №6 Тема: «Диалоговое приложение для работы с файлами»
- •6.1. Приложение, которое считывает файл посимвольно и делает ширину текста равной заданному количеству символов в строке.
- •6.2. Открытие и считывание файла. Нахождение строк, содержащих цифры. Запись нового файла
- •Задания для самостоятельного выполнения
- •Практическое занятие №7 Тема: «Однодокументное приложение для работы с файлами. Полосы прокрутки. Использование модальных диалоговых окон».
- •7.1. Простой пример однодокументного приложения для чтения текстового файла.
- •7.2. Простой пример однодокументного приложения, использующего класс документа для чтения файла и полосы прокрутки для отображения файла в окне.
- •Задания для самостоятельного выполнения
- •Практическое занятие №8 Тема: «Элементы графики. Использование мыши».
- •Задания для самостоятельного выполнения
Практическое занятие №8 Тема: «Элементы графики. Использование мыши».
8.1. Приложение, которое строит четырехугольник, вершины которого задает пользователь щелчками левой кнопки мыши. Программа проводит диагонали четырехугольника и выводит на экран их длины в точках и см.
Создайте однодокументное приложение (Single Document).
В окне Solution Explorer раскройте раздел Header Files и сделайте мышью двойной щелчок по имени файла …View.h, в рабочей области откроется текст файла. Этот файл содержит объявление класса C…View. В этом классе объявите переменные:
int i; // счетчик щелчков левой кнопкой мыши
CPoint p[4]; // массив для хранения координат вершин 4-угольника
CString text; // объект для вывода текста
Откройте файл …View.cpp.
В конструкторе проинициализируйте счетчик i:
C…View::C…View()
{
i = 0;
}
Найдите функцию OnDraw(…).
Измените текст функции как показано ниже.
void CQuadrangleView::OnDraw(CDC* pDC)
{
CBrush* pBrush;
CBrush NewBrush(RGB(0,255,255)); // Кисть для закраски 4-хугольника
CPen* pPen;
CPen NewPen(PS_DOT,1,RGB(0,125,125)); // Перо для диагоналей
if (i == 0)
pDC->DrawText("Задайте четыремя щелчками мыши вершины \
4-хугольника",CRect(10,10,500,30),DT_CENTER);
else
{
if (i>0 && i<4) // если пользователь щелкнул мышью менее 4 раз
// рисуем точки там, где пользователь щелкнул мышью:
for (int j = 0; j<i; j++)
pDC->SetPixel(p[j],RGB(0,0,0));
else if (i==4) // Если заданы все 4 вершины четырехугольника
{
pBrush = pDC->SelectObject(&NewBrush);
// подключаем кисть
pDC->Polygon(p,4); // рисуем четырехугольник
// устанавливаем перо:
pPen = pDC->SelectObject(&NewPen);
// рисуем диагонали:
pDC->MoveTo(p[0]);
pDC->LineTo(p[2]);
pDC->MoveTo(p[1]);
pDC->LineTo(p[3]);
// восстанавливаем контекст устройства:
pDC->SelectObject(pBrush);
pDC->SelectObject(pPen);
// Устанавливаем шрифт:
CFont* pFont;
CFont MyFont;
MyFont.CreateFont(25, 0,0,0,20, true, true, false,
0,0,0,0,0, "Arial cyr");
pFont = pDC->SelectObject(&MyFont);
pDC->SetTextColor(RGB(0,0,255)); // цвет текста
pDC->SetBkMode(TRANSPARENT); // прозрачный цвет знакоместа
CRect rect;
// прямоугольник, соответствующий клиентской области окна
GetClientRect(&rect);
// Выводим текст на экран:
pDC->DrawText(text, rect, DT_CENTER);
pDC->SelectObject(pFont); // восстанавливаем шрифт
}
}
}
В окне Class View щелкните правой кнопкой по имени класса С…View и в появившемся контекстном меню выберите Properties.
В окне Properties откройте вкладку Messages. На этой странице перечислены сообщения, которые могут передаваться клиентской области окна. Выберите в списке сообщение WM_LBUTTONDOWN и щелкните мышью справа от него. Щелкните по появившейся кнопке. Вы увидите имя функции OnLButtonDown(), которая обрабатывает щелчок левой кнопки мыши. Щелкните по этому имени, функция будет добавлена в класс С…View. Второй параметр этой функции CPoint point содержит координаты точки, в которой пользователь щелкнул мышью.
Добавьте в функцию код, показанный ниже.
void CQuadrangleView::OnLButtonDown(UINT nFlags, CPoint point)
{
if (i==4) i=0; // Если четырехугольник задан, обнуляем счетчик
p[i++] = point; // Запоминаем в массиве точку (вершину четырехугольника)
if (i==4) // Если заданы все вершины четырехугольника
{ // находим длины диагоналей (в точках):
double l1 = Len(p[0], p[2]);
double l2 = Len(p[1], p[3]);
text.Format("Длина диагоналей: %.0f и %.0f в точках",
l1, l2);
// Создаем контекст устройства для текущего окна:
CClientDC dc(this);
double wmm = dc.GetDeviceCaps(HORZSIZE);
// ширина экрана в мм
double wpix = dc.GetDeviceCaps(HORZRES); // в пикселях
double k = wmm/(wpix*10); // коэффициент пересчета из точек в см
int count = int(wpix*10/wmm);
// количество точек в 1 см по горизонтали
TRACE ("\n count1 = %i\n", count);
wmm = dc.GetDeviceCaps(VERTSIZE);
// высота экрана в мм
wpix = dc.GetDeviceCaps(VERTRES); // в пикселях
count = int(wpix*10/wmm);
// количество точек в 1 см по вертикали
TRACE ("\n count2 = %i\n", count);
CString str;
str.Format("Длина диагоналей: %.1f и %.1f в сантиметрах", l1*k, l2*k);
text+=("\n" + str); // формируем текст для вывода на экран
// Для сравнения можно вывести размеры клиентской области
CRect rect;
GetClientRect(&rect);
TRACE("Ширина и высота клиентской области: %i и %i точек \n", rect.right, rect.bottom);
}
Invalidate();// вызываем функцию OnDraw(…)
}
Добавьте вспомогательную функцию double Len(CPoint p1, CPoint p2)
в класс С…View. Эта функция находит длину отрезка между двумя точками.
double CQuadrangleView::Len(CPoint p1, CPoint p2)
{
return sqrt(pow(p1.x - p2.x, 2.) + pow(p1.y - p2.y,2.));
}
Откомпилируйте и запустите приложение.