Связывание кода со средствами пользовательского интерфейса
1) Свяжем команды меню и кнопки на панели инструментов с программным кодом. Для этого откроем View à ClassWizard… Message Maps, Class name: CMotorView и в списке Object IDs, выберем идентификаторы, которые мы задали нашим командам меню и кнопкам. Далее в списке Messages выберите COMMAND, и нажмите Add Function… Введите имя функции. Она и будет выполняться при нажатии соответствующей клавиши на панеле инструментов или команде меню.
2) Присваивив каждой кнопке функцию, получаем:
void CMotorView::OnInitial()
{
// TODO: Add your command handler code here
}
void CMotorView::OnPrevious()
{
// TODO: Add your command handler code here
}
void CMotorView::OnNext()
{
// TODO: Add your command handler code here
}
void CMotorView::OnParameters()
{
// TODO: Add your command handler code here
}
3) Функция OnInitial() будет рисовать начальное положение механизма (угол ):
void CMotorView::OnInitial()
{
// TODO: Add your command handler code here
à a = 0;
à Background();
à LeadOutParameters();
à DRAW();
}
4) Функция OnPrevious() будет рисовать следующее положение механизма при повороте кривошипа против часовой стрелки, а функция OnNext по часовой стрелке. Зададим угол поворота :
void CMotorView::OnPrevious()
{
// TODO: Add your command handler code here
à if (a==2*PI) a = 0;
à a += 15 * PI/180;
à Background();
à LeadOutParameters();
à DRAW();
}
void CMotorView::OnNext()
{
// TODO: Add your command handler code here
à if (a==2*PI) a = 0;
à a -= 15 * PI/180;
à Background();
à LeadOutParameters();
à DRAW();
}
Рис. 3.8.1. Вид диалогового окна «Parameters» |
3.8. Создание диалогового окна «Parameters»
1) В оконце Workspace выбираем вкладку ResourceView, нажимаем правой кнопкой мыши на каталоге Dialog, и выбираем Insert Dialog. Появляется чистое диалоговое окно с двумя кнопками OK и Cancel.
2) Диалоговое окно нам нужно для того, чтобы: а) менять параметры механизма (длины звеньев и угол), б) задать число положений, для одновременного отображения. Обязательно снабдим его схемой механизма, добавим кнопку для заполнения полей исходными данными, а также снабдим необходимой сопроводительной информацией.
3) Зададим всем полям для ввода чисел следующие идентификаторы: IDC_EDIT_AB, IDC_EDIT_BC, IDC_EDIT_BD, IDC_EDIT_DE, IDC_EDIT_N, IDC_EDIT_CBD. Кнопке «Исходные данные» зададим идентификатор: IDC_BUTTON_DATA.
4) Далее откроем View à ClassWizard… Member Variables, Class name: DlgParameters и, выбрав в списке Control IDs идентификатор поля, нажмите Add Variable… и задайте следующие переменные:
Control IDs: | Type | Member |
IDC_EDIT_AB | int | m_AB |
IDC_EDIT_BC | int | m_BC |
IDC_EDIT_BD | int | m_BD |
IDC_EDIT_DE | int | m_DE |
IDC_EDIT_N | int | m_N |
IDC_EDIT_CBD | double | m_CBD |
5) Далее откроем View à ClassWizard… Message Maps, Class name: DlgParameters и в списке Object IDs, выберем идентификатор IDC_BUTTON_DATA, в списке Messages выберем BN_CLICKED, и нажмем Add Function… Введем имя функции, и нажмем Edit Code. Мы перейдем сразу к новосозданной функции и pgbitv в нее следующий код:
void DlgParameters::OnButtonData()
{
// TODO: Add your control notification handler code here
à UpdateData(true);
à m_AB = 6;
à m_BC = 35;
à BD = 3;
à E = 32;
à N = 1;
à CBD = 75.;
à dateData(false);
}
Теперь при нажатии кнопки «Исходные данные», все поля заполняться моими исходными данными.
6) Чтобы при вызове диалогового окна в полях сразу появлялись нужные значения, откроем файл DlgParameters.cpp и изменим код:
DlgParameters::DlgParameters(CWnd* pParent /*=NULL*/)
: CDialog(DlgParameters::IDD, pParent)
{
//{{AFX_DATA_INIT(DlgParameters)
à m_AB = 6;
à m_BC = 35;
à m_BD = 3;
à m_CBD = 75.0;
à m_DE = 32;
à m_N = 1;
//}}AFX_DATA_INIT
}