Связывание кода со средствами пользовательского интерфейса

 

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

}