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

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”;