Изменение цвета выводимой графики с помощью кнопок
В приводимом здесь тексте Windows-приложения цвет выводимых на экран геометрических фигур изменяется при нажатии одной из двух кнопок, размещенных в окне приложения.
Исходный текст программы.
#include <owl\applicat.h> #include <owl\framewin.h> #include <owl\button.h> #include <owl\dc.h>
#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(); }
Пояснения к программе
Заголовочный файл owl\button.h содержит описание класса TButton и его членов. В начало программы помещены директивы #define CM_BUTTON1 100 #define CM_BUTTON2 200, определяющие константные идентификаторы сообщений, которые будут посылаться программе кнопками в ответ на щелчки мышью. CM_BUTTON1 генерируется первой кнопкой, CM_BUTTON2 - второй. Можно выбрать другие имена сообщений, отличные от CM_BUTTONn и значения констант, отличные от приведенных в программе, но для того, чтобы программа правильно реагировала на сообщения кнопок, необходимо правильно заполнить таблицу реакций, передав в качестве аргументов макросам таблицы имена констант и имена функций отклика.
Конструктор прикладного окна создает с помощью оператора new две кнопки, передавая им в качестве аргументов идентификатор окна, идентификатор уведомляющего сообщения, которое будет генерировать кнопка, текст надписи на кнопке и координаты размещения кнопки в окне приложения. Обратите внимание на то, что адреса созданных объектов-кнопок не присваиваются указателям. Этого не требуется делать потому, что в программе нет необходимости ссылаться на эти объекты. Функции отклика на сообщения кнопок CmButton1 и CmButton2 изменяют признак цвета геометрических фигур и объявляют о необходимости перерисовки окна приложения. Таблица отклика конструируется так же, как это делалось при использовании меню. Она содержит идентификаторы уведомляющих сообщений, приходящих от кнопок и имена функций класса прикладного окна, отвечающих за обработку данных сообщений.
Задание.
1) Создать приложение и исследовать его работу. 2) Изменить аргументы конструктора (текст кнопки, координаты, размер и т. д.) TButton одной из кнопок. 3) Исследуйте работу приложения, закомментировав вызов Invalidate в одной из функций отклика.
Ввод и редактирование текста
Данная тема будет посвящена панелям ввода и редактирования - одной из популярнейших компонент Windows. Использование панели ввода и редактирования текста позволяет приложению ввести и при необходимости отредактировать одну или несколько строк текста. Панель редактирования создается, как объект класса TEdit и может быть размещена в любом прикладном окне. Данная панель представляет собой стандартный текстовый редактор Windows, в котором доступны все операции редактирования текста - вставка и замена текста, удаление символов и работа с буфером обмена Windows. Различают два типа панелей редактирования - однострочная и многострочная.
Создание панелей редактирования и размещение их в окне приложения осуществляются аналогично созданию кнопок и полос прокрутки. Объект создается из класса TEdit. Конструктору объекта передается идентификатор окна, в котором будет размещена панель, константный идентификатор панели, текст, который будет помещен в редактор и координаты панели в окне приложения. Дополнительно конструктору передается стиль панели редактирования: TRUE, если создается многострочная панель, FALSE, если панель - однострочная (см раздел 10.7).
Пример использования однострочного текстового редактора для ввода и редактирования текста
Приведенное в этом разделе приложение создает однострочный текстовый редактор и выводит копии этой строки в окне приложения.
Исходный текст приложения
#include <owl\applicat.h> #include <owl\framewin.h> #include <owl\edit.h> #include <owl\button.h> #include <owl\dc.h> #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(); }
Пояснения к программе
Заголовочный файл owl\edit.h содержит описание класса TEdit и его членов-функций. Класс TMyWin описывает прикладное окно. В классе определен указатель на объект TEdit, используемый для ссылки на член-функции элемента редактирования. Конструктор TMyWin создает однострочную панель редактирования. Первый аргумент конструктора TEdit равен this. Это привязывает панель редактирования к прикладному окну. Конструктору также передается текст, который будет изначально размещен в панели редактирования. Дополнительно в окне приложения размещается кнопка, при нажатии которой текст из буфера редактора переписывается в строку с именем txt. Для этого вызывается GetLine. Первый параметр функции - указатель на строку, в которую требуется переписать текст строки из редактора, второй аргумент - длина переписываемой строки, третий аргумент - номер копируемой из элемента редактирования строки. Функция отклика на нажатия кнопки объявляет о необходимости перерисовки главного окна. Это приводит к тому, что Paint выводит текст, скопированный в txt в окно приложения. После запуска приложения Вы можете изменить текст в элементе редактирования, а затем нажать на кнопку. В результате все изменения в редакторе будут отображены в окне приложения.
Задание
1) Создайте и исследуйте приложение. 2) Поместите в окно приложения еще одну панель редактирования. После нажатия на кнопку приложение должно выводить в свое окно строки из первой и второй панели редактирования.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|