- •Кафедра вычислительных систем и программирования высокоуровневые методы информатики и программирования
- •Санкт-Петербург
- •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. Содержание
Int X,y;//объявить переменные для хранения координат мыши
//…
void CLab2_3View::OnLButtonDown(UINT nFlags, CPoint point)
{
x=point.x;//присвоить перем. x, y координаты указателя мыши
y=point.y;
}
- Очистить массив строк и стереть строку перед перерисовкой
void CLab2_3View::OnLButtonDown(UINT nFlags, CPoint point)
{
x=point.x;//присвоить перем. x, y координаты указателя мыши
y=point.y;
CLab2_3Doc* pDoc=GetDocument();
ASSERT_VALID(pDoc);
for (int i=0;i<10;i++)
{
pDoc--> Fio[i].Empty();//очистить массив строк
pDoc->k=0;//сброс на 0 номера текущей строки массива
}
Invalidate();//стереть прежн. строку перед перерисовкой новой
Cview::OnLButtonDown(nFlags, point);
}
Вывод текста с заданной точки
Для вывода используется функция OnDraw().
void CLab2_3View::OnDraw(CDC*pDC)
{//…
for (int i=0; i<((pDoc->k)+1); i++) //вывод на экран к строк
pDC -> TextOut (x, y+i*s1.cy, pDoc -> Fio[i]);//s1.cy-ширина строки
CSize s2=pDC->GetTextExtent(pDoc->Fio[pDoc->k]);//опр. конца
HideCaret();//скрыть курсор
pos.x=x+s2.cx;//перевод курсора в конец к-ой строки
pos.y=y+pDoc->k*s1.cy;//
SetCaretPos(pos); //задать позицию курсора
ShowCaret();//вывод курсора
}
Запустить приложение и протестировать его.
4.2.2. Меню, акселераторы, кнопки
lab3_1 «Система меню»
Цель работы - создание меню, подменю, клавиш ускоренного вызова, справки в строке состояния, акселераторов, кнопок на панели инструментов, блокировка и пометка команд.
Результаты приложения выглядят следующим образом:
[Панель инструментов] //Кнопка для команды Zamena
Untitles – lab3_1 //Меню Kartoteka с командами и
File Kartoteka Edit View Help //клавишами ускоренного вызова
Sozdanie //Блокировка команды Sozdanie
ÖProsmotr //Пометка команды Prosmotr
Correct //Подменю Correct с командами
Zamena //
Udalenie CTRL+F5 //Акселератор для Udalenie
[Строка состояния] Команда заблокирована //Справка для Sozdanie
В меню Kartoteka содержатся команды: Sozdanie - заблокировано, Prosmotr - помечено, Correct имеет подменю с двумя командами. Можно увидеть акселератор и клавиши ускоренного вызова. На панели инструментов – новая кнопка. Если задержать на кнопке указатель мыши, на экране появляется подсказка (Zamena). Щелчок на кнопке действует так же, как и выбор команды Zamena.
Для создания приложения lab3_1 выполним следующие этапы.
Создание проекта
- Создать проект lab3_1 (SDI–приложение).
Вызов редактора меню
Щелкнуть на вкладке Resource View или выполнить команду View->Resource View. Появится окно Resource View. Открыть папку lab3_1.rc.
Найти в списке папку Menu и отрыть ее. Появится строка IDR_MAINFRAME.
Дважды щелкнуть на этой строке. Запускается редактор меню Menu Editor и выводятся команды главного меню, а справа – пустое поле Type Here для нового меню.
Добавление нового меню и клавиш ускоренного вызова
Щелкнуть в поле Type Here и ввести в него &Kartoteka. Символ & ставится перед буквой ускоренного вызова (K) данного пункта меню. Затем нажать Enter. В меню появится пункт Kartoteka с подчеркнутой буквой K – клавишей ускоренного вызова.
Открыть окно свойств Properties для меню Kartoteka, щелкнув сначала на каком-нибудь пункте меню, а затем на пункте Kartoteka, либо щелкнуть правой кнопкой на пункте Kartoteka, затем на Properties. Проверить наличие в свойстве Caption значения &Kartoteka.
Перетащить с помощью мыши меню Kartoteka в позицию между меню File и Edit.
Добавить в меню Kartoteka команды.
Редактор меню уже включил в него пустое поле Type Here. Щелкнуть на нем и ввести &Sozdanie. Команды меню автоматически получают идентификаторы. Чтобы получить идентификатор в поле ID окна Properties, надо щелкнуть на какой-нибудь команде, а затем снова на команде Sozdanie. Имеется и другой способ: нажать клавишу Enter после ввода названия команды (отметка сдвинется ниже команды), а затем снова щелкнуть на команде. В окне Properties для команды Sozdanie проверить наличие в поле Caption значения &Sozdanie, а в поле ID – идентификатора ID_Kartoteka_Sozdanie.
Аналогичным образом добавить команды Prosmotr и Correct.
Добавление справки в строке состояния
Когда пользователь выделяет команду меню, в строке состояния можно вывести дополнительную информацию о ней. Для этого достаточно ввести нужный текст в свойство Prompt окна Menu Item Properties.
Ввести для команды Sozdanie текст: Команда заблокирована.
Добавление подменю
В редакторе меню щелкнуть на команде Correct. Откроется окно Menu Properties.
Установить свойство Popup в положение True. Откроется новое подменю с пустой командой Type Here.
Щелкнуть на пустой команде и ввести имя команды Zamena.
Открыть окно Properties для команды Zamena и проверить наличие в свойстве Caption значения Zamena, а в свойстве ID – идентификатора ID_Correct_Zamena.
Аналогично добавить имя команды Udalenie.
Добавление акселераторов
Акселератором называется, сочетание клавиш, которые равносильны выбору команды меню. В нашем примере Ctrl+F5 эквивалентны команде Udalenie.
В окне Resource View открыть папку lab3_1.rc, найти в списке папку Accelerator и отрыть ее. Появится строка IDR_MAINFRAME. Дважды щелкнуть на этой строке. Запускается редактор акселераторов Accelerator Editor и в окне справа выводится таблица акселераторов приложения.
Щелкнуть на пустой последней строке этой таблицы. Если окно свойств Properties закрыто, то щелкнуть на строке дважды. В поле ID этой строки редактор акселераторов выведет идентификатор по умолчанию ID_Accelepator….
Изменить идентификатор по умолчанию на идентификатор команды меню Udalenie. Для этого щелкнуть справа в поле ID строки таблицы. Справа появляется кнопка для раскрытия списка идентификаторов. Щелкнуть на кнопке и выбрать идентификатор ID_CORRECT_UDALENIE. Проверить в свойстве ID окна свойств Properties наличие такого же идентификатора.
Связать сочетание клавиш Ctrl и F5 с акселератором. Редактор акселераторов установил в поле Modifier значение Ctrl. Проверить в окне свойств Properties значение свойства Ctrl, равное True, и значения Alt и Shift, равные False. В поле Key выбранной строки таблицы акселераторов выбрать из списка значение VK_F5. Затем для сохранения изменений щелкнуть на следующей строке таблицы акселераторов.
Заменить в редакторе меню название Udalenie на Udalenie \t Ctrl+F5 (\t – символ табуляции, чтобы <Ctrl+F5> было справа).
Добавление кнопок на панель инструментов
Команду меню можно продублировать на панели инструментов в виде кнопки. Создадим кнопку для команды Zamena:
В окне Resource View открыть папку lab3_1.rc, найти в списке папку Toolbar и отрыть ее. Появится строка IDR_MAINFRAME. Дважды щелкнуть на этой строке. Запускается редактор Toolbar Editor и изображение кнопки появится в графическом редакторе..
Выбрать внешний вид кнопки. Ограничимся простейшим изображением - рамкой. Для этого нам понадобится инструмент в виде карандаша из панели редактора. Щелкнуть на пустой кнопке панели инструментов и нарисовать рамку на ее увеличенном изображении.
Связать команду меню с кнопкой на панели инструментов. Дважды щелкнуть на новой кнопке на панели инструментов. Откроется окно Toolbar Button Properties. Выбрать из списка строку ID_Correct_Zamena.
Занести в поле Prompt текст Zamena \n Zamena. Это означает, что когда пользователь задержит указатель мыши над новой кнопкой, в строке состояния появится текст Zamena. Кроме того, текст за символом \n будет выведен в качестве экранной подсказки возле кнопки.(Zamena).
Блокировка команд меню
Требуется заблокировать команду Sozdanie:
Открыть редактор меню. Для этого щелкнуть на вкладке Resource View или выполнить команду View->Resource View. Появится окно Resource View. Открыть папку lab3_1.rc. Найти в списке папку Menu и отрыть ее. Появится строка IDR_MAINFRAME. Дважды щелкнуть на этой строке. Запускается редактор меню Menu Editor и выводятся команды главного меню.
Развернуть меню Kartoteka, выбрать команду Sozdanie и открыть для нее контекстное меню, щелкнув правой кнопкой.
Щелкнуть на команде Add Event Handler (добавить обработчик события). Откроется окно мастера Event Handler Wizard.
В списке Class list выбрать Clab3_1View. Требуется выбрать в списке Message Type одно из двух сообщений: COMMAND или UPDATE_COMMAND_UI. Щелкнуть на UPDATE_COMMAND_UI, так как надо создать функцию, задающую состояние команды меню Sozdanie – заблокировать. Первое сообщение используется при добавлении функции, обрабатывающей команду меню. В поле Function handler name появится имя функции-обработчика OnUpdateKartotekaSozdanie.
Щелкнуть на кнопке Add and Edit. В окне редактора кода откроется шаблон созданной функции. Эта функция будет вызываться перед отображением новой команды меню, в ней можно заблокировать команду. Функции передается параметр рCmdUI, указатель на объект класса.
Заблокировать команду меню:
void Clab3_1View::OnUpdateKartotekaSozdanie(CCmdUI* pCmdUI)
{
pCmdUI -> Enable (false); //false - блокировка
}
Пометка команд меню
Установим пометку “галочка” для команды Prosmotr:
Открыть редактор меню. Для этого щелкнуть на вкладке Resource View или выполнить команду View->Resource View. Появится окно Resource View. Открыть папку lab3_1.rc. Найти в списке папку Menu и отрыть ее. Появится строка IDR_MAINFRAME. Дважды щелкнуть на этой строке. Запускается редактор меню Menu Editor и выводятся команды главного меню.
Развернуть меню Kartoteka, выбрать команду Prosmotr и открыть для нее контекстное меню, щелкнув правой кнопкой.
Щелкнуть на команде Add Event Handler (добавить обработчик события). Откроется окно мастера Event Handler Wizard.
В списке Class list выбрать Clab3_1View. Щелкнуть на UPDATE_COMMAND_UI, так как надо создать функцию, задающую состояние команды меню Prosmotr – пометить. В поле Function handler name появится имя функции-обработчика OnUpdateKartotekaProsmotr.
Щелкнуть на кнопке Add and Edit. В окне редактора кода откроется шаблон созданной функции. Эта функция будет вызываться перед отображением новой команды меню, в ней можно пометить команду. Функции передается параметр рCmdUI, указатель на объект класса.
Установить пометку команде меню:
void Clab3_1View::OnUpdateKartotekaSozdanie(CCmdUI* pCmdUI)
{
pCmdUI -> Enable (true); //разблокировка
pCmdUI -> SetCheck(1); //1 – добавление пометки
}
Добавление кода для команд подменю
Объявить объект Str в файле заголовков Clab3_1Doc.h:
class Clab3_1Doc:public Cdocument
{
DECLARE_DYNCREATE (Clab3_1Doc)
CString Str;
};
Вывести строку Str функцией TextOut:
void Clab3_1View::OnDraw(CDC* pDC)
{//...
ASSERT_VALID(pDoc);
pDC -> TextOut (0,0,pDoc-> Str);
}
Открыть редактор меню. Для этого щелкнуть на вкладке Resource View или выполнить команду View->Resource View. Появится окно Resource View. Открыть папку lab3_1.rc. Найти в списке папку Menus и отрыть ее. Появится строка IDR_MAINFRAME. Дважды щелкнуть на этой строке. Запускается редактор меню Menu Editor и выводятся команды главного меню.
Развернуть меню Kartoteka -> Correct, выбрать команду Zamena и открыть для нее контекстное меню, щелкнув правой кнопкой.
Щелкнуть на команде Add Event Handler (добавить обработчик события). Откроется окно мастера Event Handler Wizard-Pr.
Щелкнуть на сообщении COMMAND, так как надо создать функцию, обрабатывающую команду меню Zamena. В списке Class list выбрать Clab3_1View. В поле Function handler name появится имя функции-обработчика OnCorrectZamena.
Щелкнуть на кнопке Add and Edit. В окне редактора кода откроется шаблон созданной функции.
Включить строковый объект Str.
void Clab3_1View:: OnCorrectZamena()
{
Clab3_1Doc* pDoc=GetDocument();
ASSERT_VALID (pDOC);
pDoc -> Str = “Вызвана команда Zamena”;