Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВМИиП - Лабораторный практикум на Visual C++ 20...doc
Скачиваний:
2
Добавлен:
13.08.2019
Размер:
650.75 Кб
Скачать

4.2. Блоки по теме «Управление многооконными

диалогами»

4.2.1. Блок «Ввод/вывод информации»

Цель блока – управление клавиатурой, курсором и мышью.

lab2_1 «Управление клавиатурой»

Цель работы - ввод массива строк с клавиатуры и отображение их на экране, использование клавиш управления.

Условие задачи: ввести массив строк ФИО, отобразить их на экране, использовать клавиши управления Backspace, Enter, Esc.

Выполним этапы создания SDI-приложения.

Создадим проект lab2_1, выполнив этапы настройки (см. lab1.2).

Объявление объектов данных в классе документа

// Lab2_1Doc.h

class CLab2_1Doc: public Cdocument

{//...

protected:

Clab2_1Doc ();

DECLARE_DYNCREATE (CLab2_1Doc)

CString Fio[10]; //массив строк для вводимых символов

boolean flag;//флаг состояния клавиши Enter (true, false)

Int k;//номер текущей вводимой строки

};

Инициализация объектов с помощью конструктора

CLab2_1Doc :: CLab2_1Doc ()

{

for (int i=0; i<10; i++)

Fio[i]=”“;

flag=false; //клавиша Enter не нажата

k=0; //нумерация строк с нуля

}

Чтение печатных и управляющих клавиш

Создадим для сообщения WM_CHAR функцию - обработчик сообщений OnChar ():

Щелкнуть на вкладке Class View или на команде View->Class View. Появляется окно Class View.

Щелкнуть правой кнопкой на имени класса Clab2_1View и выбрать Properties. Появляется окно Properties.

Щелкнуть на кнопке Message. Появляется список идентификаторов сообщений.

Выбрать элемент WM_CHAR, затем щелкнуть на кнопке со стрелкой справа от указанного элемента и выбрать команду <Add> OnChar. Появляется скелет функции-обработчика OnChar().

void CLab2_1View::OnChar(UINT nChar,UINT nRepCnt,UINT nFlags)

{CView::OnChar(nChar, nRepCnt, nFlags);}

Сохранение печатного символа в документе

Печатный символ, находящийся в параметре nChar, добавляется к текущей строке Fio[], принадлежащей документу.

void CLab2_1View::OnChar(UINT nChar,UINT nRepCnt,UINT nFlags)

{

Clab2_1Doc* pDoc= GetDocument ();//указатель на объект докум.

ASSERT_VALID (pDoc); //проверка указателя

if (nChar>=32) //печатные клавиши

pDoc->Fio[pDoc->k].AppendChar(nChar);//добавление символа

//к строке Fio[]

CView::OnChar(nChar, nRepCnt, nFlags);}

Действия клавиш управления

void CLab2_1View::OnChar(UINT nChar,UINT nRepCnt,UINT nFlags)

{//…

pDoc->Fio[pDoc->k].AppendChar(nChar);

else

switch(nChar) //клавиши управления

{

case 8: //клавиша Backspace (стирание предыдущего символа)

pDoc->Fio[pDoc->k]=pDoc->Fio[pDoc->k].Left(pDoc->Fio[pDoc->k].GetLength()-1); //Left()-возвращает левый сегмент строки по

break; //заданной позиции, GetLength()-длина строки

case 13: //клавиша Enter (переход на новую строку)

pDoc->flag=true; //признак нажатия клавиши Enter,

break; //используется в функции OnDraw()

case 27: //клавиша Esc (выход из программы)

::MessageBeep((UINT)-1); //звуковой сигнал

exit(0);

break;

}

CView::OnChar(nChar, nRepCnt, nFlags);}

Вывод текста на экран

Стереть строку перед перерисовкой обновленной строки. Для этого добавить вызов функции Invalidate ():

void CLab2_1View::OnChar (UINT nChar,UINT nRepCnt, UINT nFlags)

{//...

break;

}