Създаване на диалогово-базирано приложение

Иберете File >> New >> Projects >> MFC AppWizard(exe)
В полето Project Name въведете наименованието на проекта, а в Location задайте пътя до директорията на проекта. В стъпка 1 посочете Dialog-base Application (диалогово-ориентирана програма) и натиснете бутона Next. В стъпка 4 ще видите класовете, които AppWizard ще създаде за програмата ви.
След приключване на работата с AppWizard ще видите работното пространство с дървовидното представяне на класовете в проекта(Фиг.1).

Фиг.1

Компилирайте приложната програма.

Поставяне на контроли в диалогово-базирано приложение

Едни от най-често използваните контроли са:
- статичен текст (static text) - статичният текст е предназначен единствено за четене и потребителят не взаимодейства с тази контрола;
- текстово поле (edit box) - в него се получава специфична информация от потребителя;
- бутон за управление (command button) - щракването върху тази контрола от страна на потребителя активира определено действие;
- поле за отметка (check box) - тези полета се използват за активиране или деактивиране на действието на дадена функция;
- радиобутон (radio button) - използват се по два и повече като може само един да бъде активен в даден момент ;
- каскаден списък (drop-down list box) - тази контрола се използва, когато потребитеят може да избира между множество елементи;
- групова рамка (Group Box) - използва се за поместването на няколко контроли в нея с цел приятен интерфейс на приложението.

Добавяне на контроли в прозореца

След създаването на статичния текст с бутон Enter отворете диалоговия прозорец Text Properties и задайте ID индентификатор на контролата и caption заглавие на контролата (фиг.2).

фиг.2
След създаването на текстово поле с бутон Enter отворете диалоговия прозорец Edit Properties и задайте ID индентификатор на контролата (Фиг.3).

Фиг.3
След добавяне на контролите диалогово-базирано приложение трябва да има следния вид (Фиг.4):

Фиг.4

Прикрепване на компоненти на класа към контролите

Изберете съветника ClassWizard и в прозореца Member Variables маркирайте съответната контрола и натиснете бутона Add Variables, за да прикрепите променлива към нея. В прозореца Add Member Variables задайте име и тип на променливата (фиг.5).

Фиг.5

Фиг.6
В прозореца Massege Maps на съветника ClassWizard изберте контролта на бутона за изчисляване на средия успех, маркирайте BN_CLICKED (Фиг.6) и чрез бутона Add Function задайте името на функцията, която ще изчислява ср.успех (Фиг.8).

Фиг.7

Фиг.8
Чрез бутона Edit Code въведете следния код:
void CStudentDlg::OnButtonCal()
{
    m_sru=(m_math+m_phiz+m_mtr+m_ik)/4;
}
Добавете останалите член-функции на класа CStudentDlg като кликнете с десен бутон на мишката върху класа и изберете Add Member Function (Фиг.9).

Фиг.9
Задайте типа и името на функцията (фиг.10).
BR>Фиг.10
Запишете сления код за функцията set_math:
BOOL CStudentDlg::set_math(float x)
{
   if (x<2 || x>6) return FALSE;
   m_math=x;
   return TRUE;
}
Впишете същият код и за осталите функции на дисциплините.
Създайте нови член-функции за въвеждане на фак.№ и име:
void CStudentDlg::set_name(CString x)
{
   m_name=x;
}
void CStudentDlg::set_fn(int x)
{
   m_fn=x;
}
За връщане на резултата създайте по оше една член функция към всяка променлива:
float CStudentDlg::get_math()
{
   return m_math;
}
В класа CKandidatDlg декларирайте обект с името ob1.
При натискане на бутона Изчисли да се изпълни следния метод:
void CStudentDlg::OnButtonCal()
{
UpdateData(TRUE);    //Прехдърля данните от екрана в променливите
m_sru=(m_math+m_phiz+m_mtr+m_ik)/4;
if(!ob1.set_math(m_math))
{
   MessageBox("Оценката по физика тррябва да е в интервала от 2 до 6 "," Грешка ");
   return;
}
UpdateData(FALSE);    //Прехдърля данните от променливите на екрана
}
От ClassWizard към класа CStudentDlg добавете манипулатори на събитията Killfocus към полетата с фак.№ и името. В съответните член-функции, запишете следващия код, за да съхраните в обекта стойностите на екранните променливи.
void CKandidatDlg::OnKillfocusName()
{
UpdateData(TRUE);
ob1.set_name(m_name);
}
void CKandidatDlg::OnKillfocusNb()
{
UpdateData(TRUE);
ob1.set_fn(m_fn);
}
© Copyrigt 2006 UTC. All rights reserved.