Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Класс CAktProsm



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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.019 с)...