.


:




:

































 

 

 

 





35. ( ).

4.

.

. ᒺ- , .

.

ᒺ- , .

' ' '. ' .

䳿 , ' ᒺ- 䳿 . , ', ', . , ' ', ' ' . , '-, ', .

ᒺ- , . 䳿 , ', , . 䳿 ', 䳿 .

' : ' .

, 䳿 , , (, .) , 䳿 , ' .

, , , , ' .

.

++ ', , :

struct TEvent

{int what

union{

MouseEventType mouse;

KeyDownEvent keyDown;

MessageEvent message;

};

' TEvent . (what) 䳿, 䳿. , 䳺. . what :

evNothing , , . what evNothing, - '.

evMouse .

, , :

struct MouseEventType

{int buttons;

int doubleClick;

TPoint where;

};

buttons ;

doubleClick ;

where .

evKeyDown - .

, , :

struct KeyDownEvent

{union{int keyCode;

union{char charCode;

char scanCode;

};

};

};

evMessage - - '.

䳿 ' (evMessage) :

command , 䳿;

infoPtr 䳺 () .

struct MessageEvent

{int command;

void infoPtr;

};

.

( ).

GetEvent 䳿;

Execute . ³ GetEvent HandleEvent. , .

HandleEvent . . ' (), HandleEvent . , , ( command).

ClearEvent , , .

( HandleEvent)

( TEvent) TDerivedClass :

void TDerivedClass::HandleEvent(TEvent& event)

{ //

TBaseClass::handleEvent(event);

if(event.what == evCommand) //

//

{

switch(event.message.command)

{

case cmCommand1:

// cmCommand1

// 䳿

learEvent(event);

break;

case cmCommand2:

// cmCommand2

learEvent(event);

break;

case cmCommandN:

// cmCommand

learEvent(event);

break;

default: //

break;

}

};

}

, , , , .

void TGroup::HandleEvent(TEvent& event)

{ if(event.what == evCommand)

{switch(event.message.command)

// '-

default: //

//

while((event.what!= evNothing)!!(/* */)

{

// HandleEvent

//

}

break;

}

}

ClearEvent- 䳿.

ClearEvent , event.What evNothing.

( Execute)

Execute ' :

int TMyApp::Execute()

{do{endState=0;

GetEvent(event); //

HandleEvent(event); //

if(event.what!=evNothing) //

EventError(event);

}

while(!Valid());

return endState;

}

HandleEvent , EndExec. EndExec private EndState. Valid, true, . ' , . Valid , Valid , true, true. , , .

, EventError, .

.

, . . , , .

:

+, , *, /, =,?, q

-:

onst int evNothing = 0;

onst int evMessage = 100;

onst int cmSet = 1; //

onst int cmGet = 2; //

onst int cmAdd = 3; //

..

onst int cmQuit = 101; //

-

struct TEvent

{int what

union{

int evNothing;

union{int command;

int a;}

}

}

'-,

class TInt{

int EndState;

public

int x;

Int(int x1);

virtual ~Int();

virtual void GetEvent (TEvent &event);

virtual int Exicute();

virtual void HandleEvent (TEvent& event);

virtual void ClearEvent (TEvent& event);

int Valid();

void EndExec();

int GetX();

void SetX (int newX);

void AddY (int Y);

};

.

void TInit::GetEvent(TEvent &event)

{char* OpInt = +-*/=?q; //

char s[20];

char code;

cout<<>;

cin>>s; code = s[1];

if(Test(char code,char*OpInt) // Test ,

//code OpInt

{event.what = evMessage;

swith(code)

{case +: event.command=cmAdd;

break;

caseq: event.command = cmQuit;

break;

}

// , int A

};

else event.what= evNothing

};

 

int TMyApp::Execute()

{do{endState=0;

GetEvent(event); // .

HandleEvent(event); // .

if(event.what!=evNothing) // .

while(!Valid());

return endState;

}

void TInt::HandleEvent(TEvent& event)

{

if(event.what == evMessage)

{

switch(event.message.command)

{

case cmAdd:Add(event.A);

learEvent(event);

break;

case cmQuit:EndExec();

learEvent(event);

break;

};

};

}

int TInt::Valid();

{ if (EndState == 0) return 0;

else return 1;

}

void TInt::ClearEvent(TEvent& event)

{

Event. what:= evNothing;

}

void TInt::EndExec()

{

EndState= 1;

}

void TInt::AddY(int Y)

{

x+=Y;

..

void main()

{

TInt MyApp;

MyApp.Execute();

}

.

, , .

.

1. , . ³ :

) ?

) '?

) ? ? , ²Ͳ ..?

) 䳿 ?

) 䳿 TEvent?

) HandleEvent ?

2. ', 䳿 ( ', ).

3. ' , .

4. <_><>. :

? ?

5. '. , ' ( ').

6. . , .

7. ' . TApp. Execute, .

8. .

9. (main).

.

1. , 3.

2.ʳ 5.

2. *.h. *.cpp.

3. , ' , cmXXXX.

.

1. .

2. .

3. .

4. '.

5. , TEvent .

6. .

7. GetEvent, Exicute, EndExec, Valid.

8. ( ) HandleEvent.

9.˳ main().

.

' , , , .

'

.

class TShema;

class TObject // -

{protected:

TShema* owner;

public:

TObject();

~TObject();

virtual void HandleEvent(TEvent&);

virtual void ClearEvent(TEvent&);

};

class TShema::public TObject //

{protected:

TItem* last;

public:

TShema();

~TShema();

virtual void Insert(TObject*);

virtual void HandleEvent(TEvent&);

};

class TDevice: public TShema //

{protected:

int EndState;

public:

virtual void GetEvent(TEvent&);

virtual void Execute();

virtual int Valid();

virtual void EndExec();

};

class TRec: public TObject // -

{protected:

float x;

public:

TReg();

~TReg();

float GetX();

void Set(float&);

};

class TCalc: public TDevice //

{pritected:

TReg* sum; //

TReg* reg; //

public:

TCalc();

void HamdleEvent(TEvent&);

void GetEvent(TEvent&);

void Execute();

float GetSum(); //

void PutSum(float); //

voit Help();

};

class TAdd: public TObject //

{public:

void HandleEvent(TEvent&);

void Add();

};

TObject::TObject()

{owner=0;}

TShema::TShema()

{last=0;}

TCalc::TCalc()

{TObject* r;

sum=new TReg;

reg=new TReg;

r=new TAdd;

Insert(sum);

//

};

TCalc::HandleEvent(TEvent& event)

{if(event.what==evMessage)

switch(event.command)

{cmQuit:

EndExec();

ClearEvent(event);

break;

cmGet:

cout<<GetSum()<<endl;

ClearEvent(event);

break;

cmSet:

PutSum(event.A);

ClearEvent(event);

break;

default:

TSheme::HandleEvent(event);

} }

TSheme::HandleEvent(TEvent&event)

{TItem* r;

if(event.what==evMassage)

{r=last;

while(event.what!=evNothing&&r!=0)

{r->HandleEvent(event);

r=r->next;}

} }

TAdd::HandleEvent(TEvent&event)

{if(event.what==evMessage)

switch(event.command)

{cmAdd:

//

(owner->reg)->Set(event.A);

//

Add();

ClearEvent(event);

break;

} }

TAdd::Add() //

{float a,b;

//

a=(owner->sum)->Get();

//

b=(owner->reg)->Get();

//

(owner->sum)->SetX(a+b);

}

5.

.

. BC++5.02 EasyWin . ++.

.

. . EasyWin .

.





:


: 2016-07-29; !; : 408 |


:

:

. .
==> ...

1763 - | 1690 -


© 2015-2024 lektsii.org - -

: 0.104 .