скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыРеферат: Borland C++ для Windows

Конструктор прикладного окна создает с помощью оператора 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 <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();

  }

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 <owl\applicat.h>

#include <owl\framewin.h>

#include <owl\edit.h>

#include <owl\button.h>

#include <owl\dc.h>

#define ID_MULTILINER 150

#define CM_BUTTON 160

class TMyWin: public TFrameWindow

 {

 TEdit *multiLiner;

 char *txt;

 public:

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

  {

 - multiLiner=new TEdit(this,ID_MULTILINER,"Input lines",10,10,200,100,0,TRUE);

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

  }

 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()

  {

  Invalidate();

  //UpdateWindow();

  }

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

  {

 - for (int i=1;i<=multiLiner->GetNumLines();i++)

 -  {

 -  int lineLength= multiLiner->GetLineLength(i-1);

 -  txt= new char[lineLength];

 -  multiLiner->GetLine(txt,lineLength,i-1);

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

 -  delete txt;

 -  }

  }

 class TMyApp:public TApplication

 {

  public:

  TMyApp(): TApplication(){};

  void InitMainWindow()

 - {

 - MainWindow=new TMyWin();

 - }

  };

 int OwlMain(int,char *[])

  {

  return TMyApp().Run();

  }

9.2.2. Задание

1) Сравните листинги программ, приводимые в 9.2.1 и в 9.1.1, уделив особое внимание на различия в конструировании однострочной и многострочной панелей редактирования.

2) Создайте и выполните приложение.

3) Создайте элемент меню прикладного окна, вызывающий однострочный или многострочный элемент редактирования.

9.3. Немного английского

to edit - редактировать

GetLine - to get a line - получить строку

GetLineLength - to get a line length - получить длину строки

10. Приложение. Классы библиотеки OWL.

10.1. Иерархия классов библиотеки OWL, используемых в пособии

10.2. Класс TApplication

 Производный от класса TModule. Используется для порождения класса для объекта-приложения Windows.

Класс TApplication содержит 7 членов-данных и 35 членов-функций, из которых в данном пособии используются:

10.2.1. Член-данное:

TFrameWindow *MainWindow; -  -  public

Указатель на главное окно приложения.

10.2.2. Член-функции:

virtual void InitApplication(); -  -  protected

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

virtual void InitInstance(); -  - - protected

Выпоняется для каждого экземпляра приложения. InitInstance вызывает InitMainWindow, а затем создает и высвечивает на экране главное окно путем вызова соответственно TWindow::Create и TWindow::Show.

virtual int Run(); -  -  - public

Инициализирует экземпляр приложения, вызывая InitApplication для первого экземпляра и InitInstance для всех остальных. Если инициализация прошла успешно, Run вызывает MessageLoop и запускает приложение.

virtual void InitMainWindow(); -  -  protected

По умолчанию InitMainWindow создает обобщенный объект - главное окно с именем приложения в качестве заголовка. Для создания требуемого главного окна необходимо переопределить InitMainWindow, не забыв сделать ссылку в MainWindow на созданное главное окно (класса TFrameWindow).

TAplication( const far*name=0); -  -  public

Этот конструктор создает объект класса TApplication.

name - указатель на имя приложения.

Этот конструктор используется в теле функции OwlMain.

10.3. Класс TFrameWindow

Производный от TWindow. Управляет поведением главного окна посредством управления клавиатурой и обработкой команд меню.

Класс TFrameWindow содержит 4 член-данных и 25 член-функций, из которых в данном пособии используются:

10.3.1. Член-функции:

virtual BOOL AssignMenu(TResId menuId); - - public

Устанавливает Attr.Menu равным аргументу menuId и удаляет предыдущее меню окна

void SetupWindow(); -  - - protected

Вызывает TWindow::SetupWindow() для создания окон в списке потомков. SetupWindow() выполняет начальную подготовку пользовательского окна, если оно существует, связывает меню рамки с ресурсом меню.

TFrameWindow(TWindow *parent, const char far *title=0, TWindow *clientWnd=0, BOOL shrinkToClient=FALSE, TModule *module=0); -  - public

Создает объект-окно с окном предком, на которое указыывает parent. Устанавливает позиции и поля размеров структуры Attr равными стандартным значениям.

title - имя заголовка создаваемого окна.

10.4. Класс TWindow

Производный от классов TEventHandler и TStreamableBase. Обеспечивает специфическое поведение окон.

Класс TWindow содержит 12 член-данных и 175 член-функций, из котрых в данном пособии используются:

10.4.1. Член-данные:

TWindowAttr Attr; -  - - public

Сохраняет структуру TWindowAttr, содержащую атрибуты создания окна.

TWindow *parent; -  -  - public

Указывает на интерфейсный объект, служащий окном-предком для данного интерфейсного объекта.

char far *title; -  -  - public

Указываетна заголовок окна.

10.4.2. Член-функции:

TWindow(TWindow *parent, const char far *title=0, TModule *module=0);  public

Конструктор класса TWindow. Добавляет this к списку окон-потомков parent, если this не 0.

Также устанавливает заголовок окна title и инициализирует атрибуты создания окна.

virtual BOOL CanClose(); -  - - public

Возвращает TRUE, если ассоциированный интерфейсный элемент может быть закрыт. Иначе возвращает FALSE.

inline TApplicacion*GetApplication(); -  - public

Получает указатель на объект TApplication, связанный с this.

int MessageBox(const far*text, const char far* caption=0, UINT type=MB_OK); public

Создет и выводит окно сообщений, содержащее сообщение text, заголовок caption и пиктограммы или кнопки type.

Тип type может содержать комбинации констант MB_XXX: IDABORT, IDCANCEL, IDIGNORE, IDNO, IDOK, IDRETRY, IDYES.

virtual void Paint(TDC& dc, BOOL erase, TRect& rect); -  public

Вызывается базовыми классами при реагировании(отклике) на сообщение WM_PAINT.

Paint вызывается с помощью EvPaint и автоматически запрашивается системой Windows для повторного вывода содержимого окна.

dc является контекстом отображения рисования, передаваемым функциям рисования тек ста и графического вывода.

Заданная ссылка на структуру TRect представляет собой ограничивающий прямоугольник области, требующей перерисовки.

erase показывает, нужно ли стирать фон.

10.5. Класс TDC

Является корневым классом для вспомогательных классов контекстов устройств GDI. Класс TDC содержит 8 член-данных и 149 член-функций, из которых в данном пособии используются:

10.5.1. Член-функции:

inline BOOL Ellipse(int x1, int y1, int x2, int y2); - - public

inline BOOL Ellipse(const TPoint& p1, const TPoint& p2);

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

Возвращает TRUE, если вызов успешный, иначе - FALSE.

inline BOOL Rectangle(int x1, int y1, int x2, int y2); - - public

inline BOOL Rectangle(const TPoint& point, const TSize& size);

inline BOOL Rectangle(const TRect& rect);

Рисует и заполняет прямоугольник заданного размера в данном контексте с использованием текущего пера и кисти.

Возвращает TRUE при успешном завершении и FALSE в противном случае.

void SelectObject(const TPen& pen); -  -  public

Выбирает заданное перо в заданном контексте устройства. Выбранный ранее объект сохраняется в соответствующем элементе данных.

inline virtual TColor SetTextColor(TColor color); - - public

Устанавливает текущий цвет текста в данном контексте в заданное значение color. Цвет текста определяет цвет, используемый в TDC::TextOut.

inline virtual BOOL TextOut(int x, int y, const char far* string, int count=-1); public

inline virtual BOOL TextOut(const TPoint& point, const char far* string, int count=-1);

Рисует до count символов заданной, заканчивающейся нулем, строки string в данном контексте устройства. Если count=-1(по умолчнию), рисуется вся строка. Аргументы x,y задают логические координаты опорной точки, которая используется для выравнивания первого символа.

10.6. Класс TScrollBar

Объекты типа TScrollBar представляют самостоятельные вертикальные и горизонтальные линейки прокрутки. Большинство член-функций TScrollBar управляют позицией и диапазоном перемещения бегунка линейки прокрутки.

Класс TScrollBar содержит 2 член-данных и 18 член-функций, из которых в даном пособии используются:

10.6.1. Член-функции:

TScrollBar(TWindow* parent, int id, int x, int y, int w, int h, BOOL isHScrollBar, TModule* module=0); -  -  -  public

Создает и инициализирует объект типа TScrollBar в заданном окне с идентификатором id, в позиции x,y и размерами w,h. Если isHScrollBar равен TRUE, то создается горизонтальная линейка прокрутки, иначе - вертикальная.

inline virtual int GetPosition(); -  -  public

Возвращает текущую позицию бегунка линейки прокрутки.

inline virtual void SetRange(int min, int max); - - public

Устанавливает линейку прокрутки в диапазоне от min до max.

10.7. Класс TEdit

Класс TEdit используется при создании объекта “панель редактирования”. TEdit является производным от класса TStatic, который в свою очередь порожден от класса TControl.

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

Член-функции класса TEdit обрабатывают текст панели редактирования.

Класс TEdit содержит 1 член-данное и 52 член-функции, из которых в данном пособии используются:

TEdit(TWindow *parent, int id, const char far *text, int x, int y, int w, int h, UINT textlen, BOOL multiline=FALSE, TModule *module=0); -  - public

Конструирует панель редактирования в окне parent, задавая идентификатор панели id, местоположение x,y и размеры панели w,h, длину вводимого текста textlen. Аргумент multiline задает вид панели редактирования(однострочная или многострочная).

BOOL GetLine(char far* str, int strSize, int lineNumber); -  public

Получает текстовую строку с номером lineNumber из панели редактирования и возвращает ее в строке str, заканчивающейся нулем.

strSize задает количество получаемых символов.

int GetLineLength(int lineNumber); -  -  public

Возвращает количество символов в строке, заданной номером lineNumber.

inline int GetNumLines(); -  - - public

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


Страницы: 1, 2, 3, 4


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.