Создание меню Position, Edit и кнопок панели инструментов
ВВЕДЕНИЕ __________________________________________________________________ 3
РАСЧЕТ КООРДИНАТ ТОЧЕК МЕХАНИЗМА __________________________________________ 4
2.1. Исходные данные ______________________________________________________ 4
2.2. Расчет координаты точки B ____________________________________________ 5
2.3. Расчет координаты точки C ____________________________________________ 5
2.4. Расчет координаты точки D ____________________________________________ 6
2.5. Расчет координаты точки E ____________________________________________ 7
Этапы программирования ____________________________________________________ 8
3.1. Создание проекта “Motor” _____________________________________________ 8
3.2. Создание меню Position, Edit и кнопок панели инструментов ____________ 9
3.3. Ввод основных переменных ____________________________________________ 11
3.4. Функции для расчета координат точек C, D и E ________________________ 12
3.5. Функция вывода на экран текущих значений параметров _________________ 13
3.6. Функции отрисовки механизма _________________________________________ 14
3.7. Связывание кода со средствами пользовательского интерфейса __________ 19
3.8. Создание диалогового окна “Parameters” ______________________________ 20
3.9. Изменение параметров механизма с помощью диалогового окна ___________ 21
3.10. Диалоговое окно “About Motor” ______________________________________ 22
ЗАКЛЮЧЕНИЕ _______________________________________________________________ 23
4.1. Исходный текст программы ____________________________________________ 23
4.1.1. MotorView.h ____________________________________________________ 23
4.1.2. MotorView.cpp __________________________________________________ 24
4.1.3. DlgParameters.h ________________________________________________ 30
4.1.4. DlgParameters.cpp ______________________________________________ 31
4.2. Пояснение сносок ____________________________________________________ 33
1. Введение
Данная работа содержит программу, которая отображает на экране заданный механизм в каком-либо одном или сразу в нескольких положениях, также имеет возможность изменения размеров звеньев в разумных пределах, не нарушая целостности механизма, путем вызова специального диалогового окна.
После запуска приложения в окне появляется механизм с начальными параметрами. С помощью кнопок на панели инструментов, пользователь может поменять положение механизма (кнопки “previous” и “next”), вызвать диалоговое окно (кнопка “parameters”) с параметрами механизма.
Вызвав диалоговое окно, пользователь имеет возможность изменить в нем основные параметры механизма, а также задать число положений для одновременного их отображения на экране.
Пользователь может сворачивать окно или закрывать его другими окнами, после того, как окно приложения снова сделается активным, механизм автоматически отобразится с последними изменениями.
Расчет координат точек механизма
Расчет координат точек механизма на чертеже относительно стойки с координатами и угла наклона кривошипа — .
Исходные данные
Рис. 2.1. Схема механизма |
Дано:
Задание:
Написать программу на языке Visual C++, в которой бы осуществлялось отображение модели заданного механизма с возможностью: а) просмотра какого-либо одного положения, или сразу нескольких положений механизма, б) изменять посредством ручного ввода через диалоговое окно параметры механизма, в) просмотра какого-либо одного положения, или сразу нескольких положений механизма с измененными параметрами.
2.2. Расчет координаты точки
Рис. 2.2. |
Формулы расчета координат:
;
.
Рис. 2.3. |
2.3. Расчет координат точки
Формулы для расчета координат:
;
Найдем расстояние :
;
Расчет и :
;
.
2.4. Расчет координаты точки
Рис. 2.4. |
Местоположение звена будет определяться углом , найдем этот угол:
.
Используя теорему синусов найдем углы и :
,
,
где , а находим из теоремы косинусов:
.
Формулы для расчета координат:
;
.
2.5. Расчет координат точки
Рис. 2.5. |
Расчет осуществляется следующим образом: т. к. точка перемещается по известной нам прямой, а координаты точки мы уже рассчитали, то будем перемещать точку от (вытекает из аксиомы о длине стороны треугольника, которая гласит, что длина стороны треугольника не может быть меньше модуля разности двух других его сторон), при этом измеряя расстояние , до тех пор, пока оно не будет равно , т. е. пока точка не сольется с искомой точкой E.
Программа расчета координат точки находится в пункте 3.4.
Этапы программирования
3.1. Создание проекта “Motor”
Для того чтобы начать программировать, нужно создать проект, для этого нужно выполнить следующие действия:
Рис. 3.1.1. Начало создания новой программы с помощью мастера AppWizard |
1) Запустим Microsoft Visual C++ 6.0 и выполним команду FileàNew; открывается окно диалога New (рис. 3.1.1).
2) Выберем из списка строку MFC AppWizard (exe).
3) Введем в текстовом поле Project Name имя проекта (например, Motor).
Рис. 3.1.2. MFC AppWizard упрощает создание программ на Visual C++ |
4) Нажмем кнопку ОК, чтобы запустить мастер Visual C++ AppWizard (рис. 3.1.2).
Рис. 3.1.3. Окно New Project Information MFC AppWizard |
5) Установим переключатель Multiple Document и нажмем кнопку Finish – откроется окно New Project Information (рис. 3.1.3).
6) Нажмем кнопку ОК, чтобы завершить создание проекта.
Создание меню Position, Edit и кнопок панели инструментов
Рис. 3.2.1. Построение Меню |
1) Откроем редактор меню (см. рис. 3.2.1).
2) Удалим все команды меню, которые нам не понадобятся.
3) Включим в меня Edit команду Parameters. Создадим меню Position и включим в него три команды: Initial, Previous, Next.
4) Двойным щелчком мыши на панели откроется окно Menu Item Properties (рис. 3.2.2), в поле Caption введем название меню (Position).
Рис. 3.2.2. Добавление команды меню |
5) По аналогии создаются команды подменю.
6) Теперь необходимо присвоить каждой новой команде меню свой идентификатор. Для этого опять вызовем Menu Item Properties, и в поле ID введем следующие идентификаторы:
Объект | Свойство | Установка |
Menu | ID Caption | ID_PARAMETERS Parameters |
Menu | ID Caption | ID_INITIAL Initial |
Menu | ID Caption | ID_PREVIOUS Previous |
Menu | ID Caption | ID_NEXT Next |
7) Затем откроем панель инструментов программы (рис. 3.2.3).
Рис. 3.2.3. Построение панели инструментов |
8) Удалим все кнопки, кроме About (при нажатии на нее, будет открываться диалоговое окно, в котором будет содержаться информация о программе), и создадим четыре новых кнопки, (каждый раз, когда вы рисуете что-нибудь на кнопке, редактор добавляет в конец панели новую пустую кнопку). Внешний вид кнопок изображен на рис. 3.2.3.
Рис. 3.2.4. Присвоение идентификаторов кнопкам панели инструментов |
9) Далее необходимо связать кнопки с соответствующими командами меню, для этого дважды щелкните на кнопке и выберите идентификатор команды меню из списка ID диалогового окна Properties. Пример показан на рис. 3.2.4.
10) Итак, основные средства пользовательского интерфейса – команды меню и кнопки панели инструментов готовы. Теперь необходимо связать их с кодом программы (кнопка Parameters и соответствующая ей команда меню, будут вызывать диалоговое окно, которое мы создадим немного позже).
Ввод основных переменных
1) Начнем с объявления необходимых переменных. Для этого откроем файл MotorView.cpp.
2) Так как размеры звеньев большие, а нам нужно отобразить на экране монитора только модель механизма, то в программе примем за длины звеньев относительные единицы: , , , . Если умножить эти значения на коэффициент , то размерностью звеньев будет — пиксель. Для удобства расположения механизма в окне приложения, возьмем . Получается, что каждый сантиметр заданного механизма, на экране будет отображаться четырьмя пикселями.
3) Нам понадобятся число и коэффициент , введем их в начале файла с помощью директивы #defune, чтобы потом в программе вместо чисел подставлять их обозначения. Добавим следующую запись:
à #define PI 3.1415
à #define mn 4 // множитель
а заодно добавим библиотеку math.h, в которой содержатся математические функции (без них нам не обойтись):
à #include “math.h”
4) В конце файла добавляем следующий код:
à int Ox=200, Oy=250, // Координаты точки A
à Bx, By, // Координаты точки B
à Cx, Cy,
à Dx, Dy,
à Ex, Ey,
à AB = 6 * mn, // Длина звена AB
à BC = 35 * mn, // Длина звена BC
à BD = 3 * mn,
à DE = 32 * mn,
à ACx, ACy, // Координаты второй точки кулисы 1
à AEx, AEy;
à double
à a01 = 32.5 * PI/180, // Угол наклона кулисы 1 к горизонтали
à a02 = 327.5 * PI/180,
à a = 0 * PI/180, // Угол наклона кривошипа
à CBD = 75 * PI/180; // Угол между звеньями CB и BD
à POINT
à KC[4], // 4-е точки, по которым рисуется камень С
à KE[4];
à int dK=13; // 2*dK - диагональ камня
à double aK=PI/6; // 2*aK - угол между диагоналями камня
Здесь объявлены переменные, и одновременно им присвоены заданные значения размеров звеньев и углов, а также координаты точки (стойки).