// Object definitiions *********************************** #include #pragma hdrstop Object::Object(Object *AParent) { Parent=AParent; //Add onto parents childlist if (Parent) { Next=Parent->ChildList; Parent->ChildList=this; if (Next) Next->Prev=this; ParentHWnd=Parent->hWnd; } else { // no parent Next=NULL; ParentHWnd=0; } ChildList=Prev=NULL; } Object::~Object() { // delete all children Object *List=ChildList,*Nxt; while (List) { Nxt=List->Next; delete List; List=Nxt; } // remove this object from parents Childlist if (Next) Next->Prev=Prev; if (Prev) Prev->Next=Next; // only child? if (Parent && Parent->ChildList==this) Parent->ChildList=Next; } BOOL Object::CanClose() { Object *Child=FirstChild(); while (Child) { if (!Child->CanClose()) return FALSE; Child=NextChild(Child); } return TRUE; } BOOL Object::EV_FIND(TMSG &) { return FALSE; } BOOL Object::Create() { return FALSE; } // returns TRUE if message is processed BOOL Object::EV_SEARCH(GEN_EV_INFO * EV_TABLE, TMSG &Msg, GENERIC *Owner) { while ((EV_TABLE)->Msg) { if (EV_TABLE->Msg==Msg.Msg) { switch (EV_TABLE->Type) { case 0: if (EV_TABLE->Id==LOWORD(Msg.wParam)) { ( Owner->*EV_TABLE->Proc)(); return TRUE; } break; case 2: if (EV_TABLE->Id==LOWORD(Msg.wParam)) { #ifndef WIN32 ( Owner->*((NotifyProc) EV_TABLE->Proc) ) (HIWORD(Msg.lParam)); #else ( Owner->*((NotifyProc) EV_TABLE->Proc) ) (HIWORD(Msg.wParam)); #endif return TRUE; } break; case 1: return (Owner->*( (Proc1) EV_TABLE->Proc) ) (Msg); } } EV_TABLE++; } return FALSE; } BOOL Object::WndProc(TMSG &Msg) { return (Msg.RetVal=DefProc(hWnd,Msg.Msg,Msg.wParam,Msg.lParam))==0; } LRESULT Object::DefProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam) { return DefWindowProc(hWnd,Msg,wParam,lParam); }