Създаване на диалогово-базирано приложение
Иберете 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);
}
|