Реферат: Borland C++ для Windows
Конструктор TMyWin, конструируя окно приложения, инициализирует значения pn и pk.
Объявление класса также содержит прототип функции Paint. Операторы, расположенные в теле Paint, используют контекст устройства dc, передаваемый ей при вызове.
6.1.3. Задание
1) Создать и выполнить приложение. Проверить его работу, изменяя размеры прикладного окна.
2) Изменить функционирование Paint, поместив в ее тело операторы
pk.x+=25;
pk.y+=15;
Поэкспериментируйте с приложением и объясните поведение прикладного окна.
6.1.4. Немного английского
to paint - красить, перекрашивать, рисовать
a rectangle - прямоугольник
an ellipse - эллипс
to select - выбирать
SelectObject - to Select an Object - выбрать объект
7. Создание меню
Окна почти каждого приложения содержат строку меню, выбрав которое, мы получаем список команд. Любую из этих команд можно выполнить, сделав щелчок на ней левой клавишей мыши. При этом Windows посылает соответствующее сообщение приложению. Если приложение имеет соответствующую функцию отклика, то оно сможет отреагировать на команду меню.
В описании таблицы отклика необходимо для каждой команды меню вставить макрос вида
EV_COMMAND(MENU_ITEM_ID,<имя функции>),
где MENU_ITEM_ID - константный идентификатор пункта меню,
<имя функции> - имя функции отклика, которая будет активизироваться при выборе пункта меню с заданным идентификатором. В отличие от функций реакции на системные сообщения, функция отклика на команду меню может иметь любое имя.
Обратите внимание. Для разработки данного приложения необходимо создать файл ресурсов с расширением .rc, в котором будет храниться описание ресурса меню программы, и файл с расширением .rh, в котором будут сохранены константные идентификаторы пунктов меню. Нет необходимости создавать данные файлы вручную. Для этого мы воспользуемся программой Resource Workshop.
7.1. Создание ресурсов программы с помощью Resource Workshop
1. Запустите компилятор. Для этого активизируйте пиктограмму Borland C ++.
2. Выполните команду Project|New project.
3. Как было описано ранее, выберите имя и путь к создаваемому проекту.
4. Выберите Advanced в диалоге New project. Затем в появившейся панели снимите флажок def и установите флажок rc. Завершите создание проекта нажатием OK.
5. В результате Ваших действий должно появиться окно проекта, содержащее два файла: один с расширением .cpp, другой - с расширением .rc, являющийся файлом ресурсов создаваемого проекта.
6. Теперь можно приступить к созданию ресурсов нашего приложения, а именно, меню. В результате проделанной работы Вы должны будете получить меню Size и два его пункта - Large и Small. Они понадобятся нам в программе, которая будет выводить геометрические фигуры разных размеров по желанию пользователя.
7. В окне проекта выберите файл с расширением .rc. В отличие от cpp-файлов, файлы с расширением .rc редактируются не в текстовом редакторе, а в специализированном редакторе ресурсов Resource Workshop. В его окне Вы сможете увидеть содержимое Вашего rc-файла, но в данный момент он пустой.
8. Первое, что необходимо сделать - это добавить в проект ресурсов файл с расширением .rh (resource header, т. е. заголовок ресурсов). Это необходимо для того, чтобы в своей программе Вы могли ссылаться на созданные ресурсы через rh-файл так же, как Вы ссылаетесь на библиотечные функции компилятора, описанные в файлах с расширением .h.
Для подключения файла выполните File|Add to project. В появившейся диалоговой панели в поле File type выберите RH, H header, а в поле File name введите имя своего header-файла (в описании данной лабораторной работы было использовано имя lab3c.rh, которое фигурирует в приведенных ниже листингах. Если Вы введете имя, отличное от него, то Вы должны будете учитывать это при включении файла в свою программу). Ответьте Yes на вопрос о необходимости создания файла.
9. Теперь можно приступить к созданию меню нашего приложения. Для этого выполните следующее:
1) Выполните команду Resource|New из меню редактора ресурсов.
2) В списке возможных типов ресурсов панели New resource выберите MENU.
Убедитесь, что поле Place identifiers in указывает на файл с расширением .rh. Поле Place resource in должно всегда указывать на Ваш rc-файл. Нажмите OK и Workshop приступит к созданию меню.
3) После проделанных шагов Вы должны увидеть следующее:
Появившееся окно представляет собой редактор меню. В заголовке Вы видите название созданного меню MENU_1. В правом верхнем углу окна располагается поле TEST MENU, которое позволяет проверить работу создаваемого меню. Строка созданного меню содержит название раздела меню Pop-up (что означает всплывающий). При щелчке мышью на данном имени появляются пункты меню.
4) Нам нужно получить пункт меню с именем Size. Для этого щелкните мышью по имени Pop-up в поле тестирования меню, либо на том же имени в описании меню в правом нижнем углу окна. Далее, перейдите в поле Item text и переименуйте пункт меню из Pop-up в Size. Нажмите Enter и убедитесь, что поле тестирования отобразило переименованный пункт меню.
5) Нам требуется создать команду меню Small. Для этого в поле тестирования или в окне описания меню выберите пункт Item. В поле тестирования это делается выбором пункта Size и выбором в появившемся меню поля Item.
6) Убедитесь, что поле Item text действительно содержит текст “Item”. Перейдите в это поле и измените текст на “Small”. Проверьте, что в создаваемом меню отображается пункт Small.
7) В поле Item Id редактора меню введите имя константного идентификатора, который будет передаваться программе при выборе пункта меню Small. Пусть это будет CM_SIZE_SMALL (CM означает Command, команда).
8) Создадим теперь пункт меню Large. Для начала проверьте, что в окне описания меню выделен пункт меню Small, т. к. создаваемый нами новый пункт меню должен появиться под ним. Затем выполните команду меню редактора Menu|New menu item. Результатом работы команды будет новый пункт меню, который будет расположен под командой Small. С помощью описанных выше действий дайте пункту меню имя Large и впишите идентификатор команды CM_SIZE_LARGE.
Обратите внимание! Необходимо выбирать New menu item, а не New menu pop-up, который создает не команду, а пункт меню, который сам содержит свои команды и при активизации открывает вложенное в него меню.
9) Проверьте, что показывает поле тестирования созданного Вами меню.
На этом создание меню программы завершено. Закройте Workshop и ответьте Yes на предложение программы сохранить результат Вашей работы.
Необходимо также отметить, что в header-файл, имя которого Вы указали в начале построения проекта, будут помещены имена константных идентификаторов пунктов меню CM_SIZE_SMALL и CM_SIZE_LARGE, а также идентификатор меню MENU_1, на которые Вы будете ссылаться при написании программы.
7.2. Программирование с использованием меню
Нижеследующее приложение использует команды Small и Large для управления выводом на экран фигур разного размера.
Прежде, чем приводить текст программы покажем, что же мы получили в результате манипуляций над Resource Workshop.
7.2.1. Листинг rh-файла
/**************************************************************************
lab3с.rh
produced by Borland Resource Workshop
**************************************************************************/
#define MENU_1 1
#define CM_SIZE_SMALL 102
#define CM_SIZE_LARGE 101
7.2.2. Листинг rc-файла
/**************************************************************************
LAB3С.RC
produced by Borland Resource Workshop
**************************************************************************/
#include "lab3с.rh"
MENU_1 MENU
{
POPUP "Size"
{
MENUITEM "Small", CM_SIZE_SMALL
MENUITEM "Large", CM_SIZE_LARGE
}
}
Вообще rc-файл содержит в себе текстовое описание ресурсов и, как может показаться, легче написать его с помощью текстового редактора. Это верно только для простых файлов ресурсов. Для написания же больших программ лучше воспользоваться возможностями Resource Workshop.
7.2.3. Исходный текст приложения
#include <owl\applicat.h>
#include <owl\framewin.h>
#include <owl\dc.h>
#pragma hdrstop
#include "lab3а.rh"
class TMyWin : public TFrameWindow
{
public:
TPoint pn,pk;
TMyWin() : TFrameWindow(0,"The Paint function")
{
pn.x=100;
pn.y=50;
pk.x=300;
pk.y=200;
}
protected:
void Paint(TDC&,BOOL,TRect&);
void CmLarge();
void CmSmall();
DECLARE_RESPONSE_TABLE(TMyWin);
};
DEFINE_RESPONSE_TABLE1(TMyWin,TFrameWindow)
EV_COMMAND(CM_SIZE_LARGE,CmLarge),
EV_COMMAND(CM_SIZE_SMALL,CmSmall),
END_RESPONSE_TABLE;
void TMyWin::Paint(TDC &dc,BOOL,TRect&)
{
TColor color(TColor::LtBlue);
TPen pen1(color);
dc.SelectObject(pen1);