Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
1) Создание ресурса диалогового окна с идентификатором IDD_AKTPROSM.
Создать следующую форму диалогового окна просмотра записей файла Акт (рис. 10.6).
Акты-Просмотр |
Таб. номер Вид работы _ Разряд Объем _ << < > >> Cancel Запись 0 из 0 |
Рис. 10.6. Диалоговое окно просмотра записей файла Акт
- Создать шаблон диалогового окна.
Для этого выполнить команду Project-> Add Resource и в появившемся окне Add Resource дважды щелкнуть на элементе Dialog в списке Resource Type.
Появляется шаблон диалогового окна с идентификатором IDD_DIALOG1 и заголовком Dialog, а также панели инструментов Dialog Editor и Toolbox. В окне имеются две кнопки OK и Cancel. Отмасштабировать окно.
- В окне свойств окна Properties изменить значение свойства ID с IDD_DIALOG1 на IDD_AKTPROSM, а также – значение свойства Caption с Dialog на Акт-Добавление.
- Установить язык Русский.
Для этого в окне Resource View щелкнуть на идентификаторе IDD_AKTPROSM. В появившемся окне свойств Properties щелкнуть на свойстве Language и в списке выбрать язык Русский.
- Добавить в диалоговое окно элементы управления.
Добавить четыре надписи (инструмент Static Text), четыре текстовых поля (Edit Control), четыре кнопки и надпись Запись 0 из 0.
Щелкнуть сначала на инструменте панели инструментов Toolbox, а затем - в выбранной области диалогового окна. Для изменения свойств элементов щелкнуть на элементе и в окне свойств Properties ввести значения:
- для надписей только в свойство Caption – Таб. Номер, Разряд, Вид работы, Объем; для текстовых полей в свойство ID – IDC_TABN, IDC_RAZRJAD, IDC_VIDRAB, IDC_OBJEM;
- для кнопки << в ID - IDC_AKTPROSM_NACH и в свойство Caption - символы <<; для кнопки < IDC_AKTPROSM_PRED и символ <; для кнопки > - IDC_AKTPROSM_SLED и символ >; для кнопки >> IDC_AKTPROSM_KONEC и символы >>, для кнопки Cancel – IDOK; для надписи Запись 0 из 0 – IDC_STATIC_NUMBER.
2) Создание класса диалогового окна.
- Открыть шаблон диалогового окна при отсутствии его. Для этого щелкнуть на вкладке Resource View или выполнить команду View->Resource View и в появившемся окне Resource View открыть папки Pr, Pr.rc, затем – Dialog и дважды щелкнуть на идентификаторе IDD_AKTPROSM.
- Щелкнуть правой кнопкой мыши на пустом месте диалогового окна и выполнить команду контекстного меню Add Class. Откроется окно мастера MFC Class Wizard.
- Ввести в поле Class name имя нового класса CAktProsm, в списке Base class выбрать имя CDialog, проверить наличие в свойстве Dialog ID идентификатора IDD_AKTPROSM, и затем щелкнуть на кнопке Finish.
3) Связывание элементов управления диалогового окна с
функциями-обработчиками сообщений
Связать кнопку <<.
- Открыть окно Class View и щелкнуть на имени класса CAktProsm. Появится окно свойств Properties.
- Щелкнуть на кнопке Events и в появившемся списке идентификаторов раскрыть идентификатор IDC_AKTPROSM_NACH (щелкнуть на символе +). Появляется список сообщений
- Выбрать элемент BN_CLICKED, а в комбинированном списке справа щелкнуть на команде <Add> OnBnClicked-AktprosmNach(). Прототип новой функции-обработчика будет добавлен в файл AktProsm.h, а ее текст – в файл AktProsm.cpp.
- Аналогично связать кнопку < с функцией-обработчиком OnBnClickedAktprosmPred(), кнопку > с функцией-обработчиком OnBnClickedAktprosmSled(),кнопку >> с функцией-обработчиком OnBnClickedAktprosmKonec(), кнопку Cancel (IDOK) с функцией-обработчиком OnBnClickedOk().
4) Связывание переменных класса с элементами окна.
Связать с текстовым полем Таб. номер.
- Запустить мастер создания переменных класса Add Member Variable Wizard. Для этого открыть окно Class View и выделить имя класса CAktProsm. Затем выполнить команду Project->Add Variable. В появившемся окне Add Member Variable Wizard-Pr выполнить следующее: установить флажок Control variable; в списке Control ID выбрать идентификатор текстового поля IDC_TABN; в списке Category выбрать значение value; в списке Variable type появится CString; ввести в поле Variable name строку m_strTabn; в списке Access проверить наличие элемента public; и наконец, щелкнуть на кнопке Finish. Появляется содержимое файла AktProsm.cpp с функциями класса AktProsm.
- Аналогично связать с текстовыми полями Разряд (IDC_ RAZRJAD), Вид работы (IDC_VIDRAB), Объем (IDC_OBJEM) переменные класса m_strRazrjad, m_strVidrab, m_strObjem.
- Выполнить те же действия для надписи Запись 0 из 0 с получением переменной m_strNumber.
5) Добавление функции-обработчика OnInitDialog().
Необходимо создать функцию CAktProsm:OnIninDialog(), которая вызывается непосредственно перед отображением диалогового окна. В результате в текстовых полях выводятся значения полей первой записи файла Акты или сообщение, что файл пуст.
- Открыть окно Class View и щелкнуть на имени класса CAktProsm. Появится окно свойств Properties.
- Щелкнуть на кнопке Overrides (с изображением зеленого ромба) и в списке функций выбрать элемент OnInitDialog(), а в комбинированном списке справа щелкнуть на команде <Add> OnInitDialog(). Прототип новой функции-обработчика будет добавлен в файл AktProsm.h, а ее текст – в файл AktProsm.cpp.
- Заменить текст функции:
BOOL CAktProsm::OnInitDialog()
{
CDialog::OnInitDialog();
if (base.fact_kol==0)//base-объект класса CAkt, объявленный в
{ //классе CAktProsm, fact_kol-кол-во заполненных записей
MessageBox("Файл пуст”, //сообщение, заголовок,восклицат. знак
"Ошибка",MB_ICONEXCLAMATION);
EndDialog(1);//флажок закрытия файла, 1 – в DoModal()
}
else
{
fact_number=1; //фактич. номер не пустой записи (кл. CaktProsm)
int i=0;
do //цикл нахождения первой не пустой записи
{
base.ChtenieZap(i);
curr_rec_number=i; //текущий номер записи (класс CAktProsm)
i++;
}
while (base.Tabn=="");
Output(base); //вывод данных в текстовые поля
CString rec_number;
rec_number.Format("Запись 1 из %d",base.fact_kol); //преобраз.
m_strNumber=rec_number; //fact_kol из целого (d) в текст
UpdateData(FALSE); //значение m_strNumber - в текст. поле
}
return TRUE;
}
6) Добавление переменных в файл AktProsm.h.
#include “Akt.h”
class CAktProsm::public CDialod
{
public:
int curr_rec_number; //текущий номер записи
int fact_number; //фактический номер не пустой записи
CAkt base;)//base-объект класса CAkt
void Output(CAkt& base); //вывод записи в текст. поля
...
}
7) Добавление текстов функций-обработчиков в файл AktProsm.cpp.
...
m_strNumber=_T(“”);
{
base.Init(); //вызов Init в конструкторе класса CAktProsm
curr_rec_number=0; //ирициализ. текущего номера записи и
fact_number=-1; //инициализ. фактич. номера не пустой записи
} //в конструкторе класса CAktProsm
void CAktProsm::Output(CAkt& base)//вывод записи в текст. поля
{
m_strTabn=base.Tabn; //присваивание знач. полей записи
m_strRazrjad=base.Razrjad;//переменным m_str…
m_strVidrab=base.VidRab;
m_strObjem=base.Objem;
UpdateData(FALSE); //знач. перем. m_str… - в текст. поля
}
-Для кнопки <<:
void CAktProsm::OnBnClickedAktprosmNach()
{
int i=0;
fact_number=1; //инициализ. фактич. номера не пустой записи
do //цикл нахождения начальной не пустой записи
{
base.ChtenieZap(i);
curr_rec_number=i;
i++;
}
while (base.Tabn=="");
Output(base); // вывод начальной записи в текст. поля
CString rec_number;
rec_number.Format("Запись 1 из %d",base.fact_kol); // преобраз.
m_strNumber=rec_number; //fact_kol из целого (d) в текст
UpdateData(FALSE); //значение m_strNumber - в текст. поле
}
//Для кнопки <:
void CAktProsm::OnBnClickedAktprosmPred()
{
int prev=curr_rec_number; //значения текущих переменных
int prev_fact=fact_number; //запоминаются в локальных перем.
int i=curr_rec_number-1; //i-текущий номер предыдущей записи
do //цикл нахождения предыдущей не пустой записи
{
if (i==-1)
{
curr_rec_number=-1;
break;
}
base.ChtenieZap(i);
if (base.Tabn!="")
fact_number--;
curr_rec_number=i;
i--;
}
while (base.Tabn=="");
if ((curr_rec_number==-1) || (fact_number<1))
{
MessageBox("Начало файла", "Ошибка", // сообщение,
MB_ICONEXCLAMATION); //заголовок, восклицат. знак
curr_rec_number=prev; //восстановление прежних значений
fact_number=prev_fact; //текущих перем. из локальных
}
else
{
base.ChtenieZap(curr_rec_number); //чтение предыдущей записи
Output(base); //вывод предыдущей записи в текст. поля
CString rec_number;
c_number.Format("Запись %d из %d", fact_number, //преобраз.
base.fact_kol); //fact_number и fact_kol из целых (d) в тексты
m_strNumber=rec_number;
UpdateData(FALSE); //значение m_strNumber - в текст. поле
}
}
//Для кнопки >:
void CAktProsm::OnBnClickedAktprosmSled()
{
int prev=curr_rec_number; //значения текущих переменных
int prev_fact=fact_number; //запоминаются в локальных перем.
int i=curr_rec_number+1; //i - текущий номер следующей записи
do //цикл нахождения следующей не пустой записи
{
base.ChtenieZap(i);
if (base.Tabn!="")
fact_number++;
curr_rec_number=i;
i++;
}
while (base.Tabn=="");
if (curr_rec_number>=base.kol)
{
MessageBox("Конец файла","Ошибка", // сообщение,
MB_ICONEXCLAMATION); //заголовок, восклицат. знак
curr_rec_number=prev; //восстановл. прежних значений
fact_number=prev_fact; //текущих перем. из локальных
}
else
{
base.ChtenieZap(curr_rec_number); //чтение текущей записи
Output(base); //вывод следующей записи в текст. поля
CString rec_number;
rec_number.Format("Запись %d из %d",fact_number, //преобраз.
base.fact_kol); //fact_number и fact_kol из целых (d) в тексты
m_strNumber=rec_number;
UpdateData(FALSE); //значение m_strNumber - в текст. поле
}
}
//Для кнопки >>:
void CAktProsm::OnBnClickedAktprosmKonec()
{
int last_rec_number=-1; //номер последней записи
for (int i=0;i<base.kol;i++) //цикл чтения всех записей кроме
{ //последней, т.е. нахождение последней записи
base.ChtenieZap(i);
if (base.Tabn!="")
last_rec_number=i;
}
base.ChtenieZap(last_rec_number);
Output(base); //вывод последней записи в текст. поля
CString rec_number;
rec_number.Format("Запись %d из %d", base.fact_kol, //преобраз.
base.fact_kol); //fact_kol и fact_kol из целых (d) в тексты
m_strNumber=rec_number;
curr_rec_number=base.kol-1;
fact_number=base.fact_kol;
UpdateData(FALSE); //значение m_strNumber - в текст. поле
}
8) Добавление в файл MainFrm.cpp текста функций вызова диалогового окна:
#include “AktProsm.h”
void CMainFrame::OnAktprosm()
{
CAktProsm dlg;
dlg.DoModal();//вывод диалогового окна
}
9) Компиляция и запуск приложения.
Протестировать просмотр записей файла Акты.
Дата публикования: 2014-11-26; Прочитано: 186 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!