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 .
.