Программирование >>  Программирование на языке c++ 

1 ... 138 139 140 [ 141 ] 142 143 144 ... 159


{ public:

my frame win() : TFrameWindow(0, Caption ) {} protected:

здесь можно объявить новые компоненты-функции

класса, таблицу откликов и т.п., например:

void EvLButtonDown(UINT, TPoint&);

DECLARE RESPONSE TABLE(my frame win); };

здесь можно описать объявленные новые функции

и таблицу откликов, например: DEFINE RESP0NSE TABLE1(my frame win,TFrameWindow)

EV WM LBUTTONDOWN, END RESPONSE TABLE;

void my frame win :: EvLButtonDown(UINT,TPoint&) { MessageBoxCYou pressed the left button ); } void my app :: lnitMainWindow() { SetMainWindow(new my frame win); } Это место для фрагмента 6

В этом примере TFrameWindow - это класс ObjectWindows и my frame win - новый класс, определенный пользователем (он является производным от TFrameWindow);

2) описать объект класса. Предположим, необходимо нарисовать прямоугольник в окне и затем автоматически перемещать его по экрану. Для этих целей ObjectWindows использует функции GDI (Graphics Device Interface). Базовым классом для работы с графикой является TDC. При этом можно либо непосредственно создать объект этого класса, либо использовать производные от TDC классы. Например, производный класс TClientDC позволяет получить доступ к рабочей области окна и имеет следующий конструктор:

TClientDC(HWNDwnd);

где wnd - дескриптор окна. В результате можно описать соответствующий объект следующим образом:

TClientDC obj(wnd);

Обычно этот объект описывается в интерфейсном классе для некоторого окна, поэтому в качестве аргумента конструктора можно использовать параметр *this, например:

TClientDC obj(*this);



Можно также объявить указатель на объект класса и потом вьщелить память с использованием оператора new, например:

TDC *dc;

dc=new TClientDC obj(*this); Рассмотрим законченный пример: #include <owl\applicat.h> #include <owl\framewin.h> #include <owl\dc.h> файл заголовка

для графических функций class my app : public TApplication { public:

my app() : TApplicationO {}

void InitMainWindowO; }; class n:y win : public TWindow { public:

my winO : TWindow(0,0,0) {}

protected:

TDC *dc; dc - это указатель на объект класса TDC int х,у;

void SetupWindowO;

void EvLButtonDown(UINT,TPoint&);

void EvTimer(UINT);

DECLARE RESPONSE TABLE(my win); }; DEFINE RESP0NSE TABLE1{my win,TWindow) EV WM LBUTTONDOWN,

EV WM TIMER, WM TIMER - это сообщение WINDOWS END RESPONSE TABLE;

void my win::EvLButtonDown(UlNT,TPoint& point) { x=point.x; y=point.y; dc = new TClientDC(*this);

dc -> Rectangle(x,y,x+100,y+100); вычерчивание

прямоугольника

delete dc; }

void my win::SetupWindow{)



{ TWindow::SetupWindow();

SetTimer(1,1); }

void my win::EvTimer(UINT) { dc = new TClientDC(*this);

dc -> Rectangle(x++,y+-i-,x+100,y+100);

if(x>500) x=y=0; if(y>800) x=y=0;

delete dc; }

void my app :: InitMainWindow(void) { SetMainWindow(new TFrameWindow(0, my win ,new

my win)); }

int OwlMain(int,char**)

{ return my app{).Run{); }

В примере функция TWindow::SetupWindow была переопределена для того, чтобы установить таймер. В результате вход EV WM TIMER таблицы откликов будет периодически активизироваться (максимально часто). Если нажать левую кнопку манипулятора мышь в рабочей области окна, то будет нарисован прямоугольник. Затем этот прямоугольник будет периодически копироваться, что создает иллюзию того, что прямоугольник перемещается по экрану.

Рассмотрим теперь, как решаются другие, часто встречающиеся задачи.

9.6.1. Создание иконки для программы пользователя

Иконку можно создать с помощью инструмента Resource Workshop. Она может быть присоединена к программе следующим образом:

GetMainWindowO -> Setlcon(this,MYJCON);

где функция TFrameWindow: :SetIcon устанавливает иконку в модуле, заданном в виде первого параметра, из ресурса, заданного в виде второго параметра. Второй параметр - это идентификатор, определенный во фрагменте 2 (см. § 9.4) и полученный из файла ресурсов *.гс, который будет выглядеть примерно так:

#define MYJCON 100 MYJCON ICON il.ico



1 ... 138 139 140 [ 141 ] 142 143 144 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика