- •Кафедра вычислительных систем и программирования высокоуровневые методы информатики и программирования
- •Санкт-Петербург
- •1.Общие положения по организации
- •2. Программирование информационной мини-системы управления методом процедурно-ориентированного программирования (тема 2).
- •2.1. Постановка задачи и проектирование программы
- •2.2. Реализация программы
- •Vyvod(cout, client);
- •Vyvod(outprintf, client);
- •Void dobzap(fstream &dobf)
- •Int tabn;
- •Int operator!(); //элемент-функция класса
- •Int akt::operator!()
- •4. Блоки лабораторных работ по разделу «Объектно-
- •4.1. Блок по теме «Создание Windows-приложений»
- •4.2. Блоки по теме «Управление многооконными
- •4.2.1. Блок «Ввод/вывод информации»
- •Int k;//номер текущей вводимой строки
- •Invalidate();
- •If (!cursor)//если курсор еще не создан, надо создать.
- •Int X,y;//объявить переменные для хранения координат мыши
- •4.2.2. Меню, акселераторы, кнопки
- •Invalidate();
- •Invalidate(); }
- •4.2.3. Диалоговые окна
- •Invalidate();
- •4.2.4. Управление файловой обработкой
- •Invalidate(); //при вводе символа вид объявл. Не действительным
- •Void AddText(uint text) {data.AppendChar(text);} //доб. В конец стр.
- •Invalidate(); //при вводе символа вид объявл. Не действительным
- •Void Serialize(cArchive& archive);//прототип переопред. Функции
- •Void cData::Serialize(cArchive& archive)
- •If (archive.IsStoring())
- •Implement_serial(cData, cObject, 0)//класс,баз. Класс,номер
- •Invalidate();
- •Invalidate();
- •5.2. Блок по теме «Поддержка баз данных»
- •If (m_Add) //если true, то добавление записи
- •5.3. Блок по теме «Программирование для Internet»
- •If (!pIs) //2 проверка подключения компъютера к Internet
- •If (!pIs) //3 проверка подключения
- •If (!pFc) //5 проверка соединения с ftp-узлом
- •6. Рекомендуемая литература
- •7. Содержание
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;
}