31244-1 (Borland C++ для Windows), страница 4

2016-07-31СтудИзба

Описание файла

Документ из архива "Borland C++ для Windows", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "31244-1"

Текст 4 страницы из документа "31244-1"

При создании линейки присвойте адрес сконструированного объекта указателю. В результате Вы получите доступ к разнообразному набору функций объекта. К примеру, появится возможность позиционировать ползунок из программы, получать позицию ползунка и изменять масштаб линейки ( по умолчанию позиция ползунка на линейке изменяется от 0 до 100).

Все сказанное выше справедливо и для горизонтальной линейки прокрутки, но для реакции на ее сообщения требуется функция EvHScroll и макрос EV_WM_HSCROLL.

Теперь уделим внимание другому компоненту визуального интерфейса Windows - кнопке.

Кнопка может быть расположена в окне приложения и представляет собой прямоугольник с надписью. Кнопка реагирует на щелчки мышью выдачей уведомляющего сообщения. Она создается в конструкторе окна приложения, как объект класса TButton.

Конструктору TButton передается адрес объекта-окна, в котором Вы хотите разместить кнопку, текст надписи на кнопке, ее координаты и размер. Конструктору также передается константный идентификатор кнопки. Данный идентификатор совпадает с идентификатором уведомляющего сообщения, генерируемого кнопкой при нажатии.

Реакция на нажатия кнопки реализуется аналогично реакции на выбор команды меню: Вы описываете функцию реакции (имя функции произвольное) на нажатия кнопки и помещаете в таблицу реакции макрос

EV_COMMAND(BUTTON_ID,UserName)

с идентификатором кнопки и именем функции отклика.

Приложение может иметь несколько кнопок с различными идентификаторами и для каждой кнопки нужно создать свою функцию отклика и добавить элемент в таблицу реакций.

Если Вы хотите реагировать только на нажатия кнопки, никак не изменяя ее характеристик, то присваивать указателю адрес созданного объекта-кнопки не требуется.

8.1. Изменение размера выводимой графики с помощью линейки прокрутки

В нижеследующем приложении в прикладном окне выдается голубой прямоугольник с вписанным в него эллипсом. В окне создается вертикальная линейка прокрутки. Перемещая ползунок линейки, можно плавно изменять размеры выводимых геометрических фигур в некотором фиксированном диапазоне.

8.1.1. Исходный текст программы

#include

#include

#include

#include

class TMyWin : public TFrameWindow

{

public:

TPoint pn,pk;

TScrollBar *sb;

TMyWin() : TFrameWindow(0,"The Paint function")

{

sb=new TScrollBar(this,1,350,100,20,125,FALSE);

pn.x=100;

pn.y=40;

pk.x=300;

pk.y=pn.y;

}

protected:

void Paint(TDC&,BOOL,TRect&);

void EvVScroll(UINT, UINT, HWND);

DECLARE_RESPONSE_TABLE(TMyWin);

};

DEFINE_RESPONSE_TABLE1(TMyWin,TFrameWindow)

EV_WM_VSCROLL,

END_RESPONSE_TABLE;

void TMyWin::Paint(TDC &dc,BOOL,TRect&)

{

TColor color(TColor::LtBlue);

TPen pen1(color);

dc.SelectObject(pen1);

dc.Rectangle(pn,pk);

TPen pen2(TColor::LtGreen);

dc.SelectObject(pen2);

dc.Ellipse(pn,pk);

}

void TMyWin::EvVScroll(UINT scrollcode, UINT thumbPos, HWND hwnd)

{

TFrameWindow::EvVScroll(scrollcode,thumbPos,hwnd);

InvalidateRect(TRect(pn,pk));

pk.y=pn.y+sb->GetPosition()*2;

UpdateWindow();

}

class TMyApp : public TApplication

{

public:

TMyApp():TApplication()

{}

void InitMainWindow()

{

MainWindow=new TMyWin();

}

};

int OwlMain(int, char *[])

{

TMyApp app;

return app.Run();

}

8.1.2. Пояснения к программе

Заголовочный файл owl\scrollba.h содержит описание класса TScrollBar и его членов-функций. Описание класса TMyWin содержит объявления точек (объектов класса TPoint) для левого верхнего и правого нижнего углов прямоугольника. В классе дополнительно объявлен объект класса TScrollBar, представляющий собой вертикальную линейку прокрутки. TMyWin содержит также функцию отклика EvVScroll на сообщения от линейки прокрутки и переопределенную функцию Paint.

В теле конструктора TMyWin создается линейка прокрутки и задаются начальные значения координат двух углов прямоугольника.

Описание таблицы реакций содержит элемент EV_WM_VSCROLL.

Функция EvVScroll вызывает одноименную функцию базового класса для обеспечения полной обработки поступающих от скроллера сообщений. Затем функция требует перерисовать часть рабочей зоны окна для вывода геометрических фигур с измененными размерами. Для получения положения ползунка на линейке прокрутки используется функция GetPosition, которая возвращает число в диапазоне от 0 до 100. Вызов функции UpdateWindow вызывает немедленное обновление окна приложения, посылая окну WM_PAINT в обход системной очереди сообщений.

8.1.3. Задание

1) Создать исследовать работу приложения.

2) Изменить вертикальную линейку прокрутки на горизонтальную.

3) Исследовать работу приложения, закомментировав вызов UpdateWindow в теле EvVScroll.

4) Исследовать работу приложения, удалив вызов функции InvalidateRect.

5) Измените таблицу реакции, удалив в ней EV_WM_VSCROLL. Объясните поведение приложения.

8.2. Изменение цвета выводимой графики с помощью кнопок

В приводимом здесь тексте Windows-приложения цвет выводимых на экран геометрических фигур изменяется при нажатии одной из двух кнопок, размещенных в окне приложения.

8.2.1. Исходный текст программы.

#include

#include

#include

#include

#define CM_BUTTON1 100

#define CM_BUTTON2 200

class TMyWin : public TFrameWindow

{

public:

TPoint pn,pk;

int nColor;

TMyWin() : TFrameWindow(0,"The Paint function")

{

new TButton(this,CM_BUTTON1,"Palette 1",350,50,80,30);

new TButton(this,CM_BUTTON2,"Palette 2",350,100,80,30);

pn.x=100;

pn.y=50;

pk.x=300;

pk.y=200;

nColor=1;

}

void Paint(TDC&,BOOL,TRect&);

void CmButton1()

{

nColor=1;

Invalidate();

UpdateWindow();

}

void CmButton2()

{

nColor=2;

Invalidate();

UpdateWindow();

}

DECLARE_RESPONSE_TABLE(TMyWin);

};

DEFINE_RESPONSE_TABLE1(TMyWin,TFrameWindow)

EV_COMMAND(CM_BUTTON1,CmButton1),

EV_COMMAND(CM_BUTTON2,CmButton2),

END_RESPONSE_TABLE;

void TMyWin::Paint(TDC &dc,BOOL,TRect&)

{

TColor color(nColor==1 ? TColor::LtBlue : TColor::LtYellow);

TPen pen1(color);

dc.SelectObject(pen1);

dc.Rectangle(pn,pk);

TPen pen2(nColor==1 ? TColor::Black : TColor::LtRed);

dc.SelectObject(pen2);

dc.Ellipse(pn,pk);

}

class TMyApp : public TApplication

{

public:

TMyApp():TApplication()

{}

void InitMainWindow()

{

MainWindow=new TMyWin();

}

};

int OwlMain(int, char *[])

{

TMyApp app;

return app.Run();

}

8.2.2. Пояснения к программе

Заголовочный файл owl\button.h содержит описание класса TButton и его членов.

В начало программы помещены директивы

#define CM_BUTTON1 100

#define CM_BUTTON2 200,

определяющие константные идентификаторы сообщений, которые будут посылаться программе кнопками в ответ на щелчки мышью. CM_BUTTON1 генерируется первой кнопкой, CM_BUTTON2 - второй. Можно выбрать другие имена сообщений, отличные от CM_BUTTONn и значения констант, отличные от приведенных в программе, но для того, чтобы программа правильно реагировала на сообщения кнопок, необходимо правильно заполнить таблицу реакций, передав в качестве аргументов макросам таблицы имена констант и имена функций отклика.

Конструктор прикладного окна создает с помощью оператора new две кнопки, передавая им в качестве аргументов идентификатор окна, идентификатор уведомляющего сообщения, которое будет генерировать кнопка, текст надписи на кнопке и координаты размещения кнопки в окне приложения.

Обратите внимание на то, что адреса созданных объектов-кнопок не присваиваются указателям. Этого не требуется делать потому, что в программе нет необходимости ссылаться на эти объекты.

Функции отклика на сообщения кнопок CmButton1 и CmButton2 изменяют признак цвета геометрических фигур и объявляют о необходимости перерисовки окна приложения.

Таблица отклика конструируется так же, как это делалось при использовании меню. Она содержит идентификаторы уведомляющих сообщений, приходящих от кнопок и имена функций класса прикладного окна, отвечающих за обработку данных сообщений.

8.2.3. Задание.

1) Создать приложение и исследовать его работу.

2) Изменить аргументы конструктора (текст кнопки, координаты, размер и т. д.) TButton одной из кнопок.

3) Исследуйте работу приложения, закомментировав вызов Invalidate в одной из функций отклика.

9. Ввод и редактирование текста

Данная тема будет посвящена панелям ввода и редактирования - одной из популярнейших компонент Windows.

Использование панели ввода и редактирования текста позволяет приложению ввести и при необходимости отредактировать одну или несколько строк текста.

Панель редактирования создается, как объект класса TEdit и может быть размещена в любом прикладном окне. Данная панель представляет собой стандартный текстовый редактор Windows, в котором доступны все операции редактирования текста - вставка и замена текста, удаление символов и работа с буфером обмена Windows.

Различают два типа панелей редактирования - однострочная и многострочная.

Создание панелей редактирования и размещение их в окне приложения осуществляются аналогично созданию кнопок и полос прокрутки. Объект создается из класса TEdit. Конструктору объекта передается идентификатор окна, в котором будет размещена панель, константный идентификатор панели, текст, который будет помещен в редактор и координаты панели в окне приложения. Дополнительно конструктору передается стиль панели редактирования: TRUE, если создается многострочная панель, FALSE, если панель - однострочная (см раздел 10.7).

9.1. Пример использования однострочного текстового редактора для ввода и редактирования текста

Приведенное в этом разделе приложение создает однострочный текстовый редактор и выводит копии этой строки в окне приложения.

9.1.1. Исходный текст приложения

#include

#include

#include

#include

#include

#define ID_ONELINER 150

#define CM_BUTTON 160

#define TEXTLEN 10

class TMyWin: public TFrameWindow

{

TEdit *oneLiner;

char txt[TEXTLEN];

public:

TMyWin(): TFrameWindow(0,"the TEdit object")

{

- oneLiner=new TEdit(this,ID_ONELINER,"Input one line",10,10,100,30,TEXTLEN,FALSE);

- new TButton(this,CM_BUTTON,"Update",10,100,70,25);

- txt[0]='\0';

}

protected:

void CmButton();

void Paint(TDC&,BOOL,TRect&);

DECLARE_RESPONSE_TABLE(TMyWin);

};

DEFINE_RESPONSE_TABLE1(TMyWin,TFrameWindow)

EV_COMMAND(CM_BUTTON,CmButton),

END_RESPONSE_TABLE;

void TMyWin::CmButton()

{

oneLiner->GetLine(txt,TEXTLEN,0);

Invalidate();

//UpdateWindow();

}

void TMyWin::Paint(TDC& dc,BOOL,TRect&)

{

- for (int i=1;i<=2;i++)

- dc.TextOut(150,50+i*20,txt);

}

class TMyApp:public TApplication

{

public:

TMyApp(): TApplication(){};

void InitMainWindow()

- {

- MainWindow=new TMyWin();

- }

};

int OwlMain(int,char *[])

{

return TMyApp().Run();

}

9.1.2. Пояснения к программе

Заголовочный файл owl\edit.h содержит описание класса TEdit и его членов-функций.

Класс TMyWin описывает прикладное окно. В классе определен указатель на объект TEdit, используемый для ссылки на член-функции элемента редактирования.

Конструктор TMyWin создает однострочную панель редактирования. Первый аргумент конструктора TEdit равен this. Это привязывает панель редактирования к прикладному окну. Конструктору также передается текст, который будет изначально размещен в панели редактирования.

Дополнительно в окне приложения размещается кнопка, при нажатии которой текст из буфера редактора переписывается в строку с именем txt. Для этого вызывается GetLine. Первый параметр функции - указатель на строку, в которую требуется переписать текст строки из редактора, второй аргумент - длина переписываемой строки, третий аргумент - номер копируемой из элемента редактирования строки. Функция отклика на нажатия кнопки объявляет о необходимости перерисовки главного окна. Это приводит к тому, что Paint выводит текст, скопированный в txt в окно приложения. После запуска приложения Вы можете изменить текст в элементе редактирования, а затем нажать на кнопку. В результате все изменения в редакторе будут отображены в окне приложения.

9.1.3. Задание

1) Создайте и исследуйте приложение.

2) Поместите в окно приложения еще одну панель редактирования. После нажатия на кнопку приложение должно выводить в свое окно строки из первой и второй панели редактирования.

9.2. Использование многострочного текстового редактора для ввода и редактирования текста.

Нижеприведенное Windows-приложение использует многострочную панель редактирования текста.

9.2.1. Исходный текст программы

#include

#include

#include

#include

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
428
Средний доход
с одного платного файла
Обучение Подробнее