Re[3]: С чего начать
От: c-smile Канада http://terrainformatica.com
Дата: 10.09.08 23:32
Оценка:
Здравствуйте, Lightlace, Вы писали:

behavior это фактически микро-окно со своей element_proc (аналог WinProc в Windows)
behaviors назначается DOM эдементу в CSS — #myelement { behavior: name-of-my-behavior; }

Вот её имплементация в htmlayout_behaviors.hpp

// ElementWventProc implementeation
    static BOOL CALLBACK  element_proc(LPVOID tag, HELEMENT he, UINT evtg, LPVOID prms )
    {
      event_handler* pThis = static_cast<event_handler*>(tag);
      if( pThis ) switch( evtg )
        {
          case HANDLE_INITIALIZATION:
            {
              INITIALIZATION_PARAMS *p = (INITIALIZATION_PARAMS *)prms;
              if(p->cmd == BEHAVIOR_DETACH)
                pThis->detached(he);
              else if(p->cmd == BEHAVIOR_ATTACH)
                pThis->attached(he);
              return TRUE;
            }
          case HANDLE_MOUSE: {  MOUSE_PARAMS *p = (MOUSE_PARAMS *)prms; return pThis->handle_mouse( he, *p );  }
          case HANDLE_KEY:   {  KEY_PARAMS *p = (KEY_PARAMS *)prms; return pThis->handle_key( he, *p ); }
          case HANDLE_FOCUS: {  FOCUS_PARAMS *p = (FOCUS_PARAMS *)prms; return pThis->handle_focus( he, *p ); }
          case HANDLE_DRAW:  {  DRAW_PARAMS *p = (DRAW_PARAMS *)prms; return pThis->handle_draw(he, *p ); }
          case HANDLE_TIMER: {  TIMER_PARAMS *p = (TIMER_PARAMS *)prms; return pThis->handle_timer(he, *p); }
          case HANDLE_BEHAVIOR_EVENT:   { BEHAVIOR_EVENT_PARAMS *p = (BEHAVIOR_EVENT_PARAMS *)prms; return pThis->handle_event(he, *p ); }
          case HANDLE_METHOD_CALL:      
            { 
              METHOD_PARAMS *p = (METHOD_PARAMS *)prms; 
              if(p->methodID == XCALL)
              {
                XCALL_PARAMS *xp = (XCALL_PARAMS *)p;
                return pThis->handle_script_call(he,*xp);
              }
              else
                return pThis->handle_method_call(he, *p ); 
            }
          case HANDLE_DATA_ARRIVED:     { DATA_ARRIVED_PARAMS *p = (DATA_ARRIVED_PARAMS *)prms; return pThis->handle_data_arrived(he, *p ); }
          case HANDLE_SIZE:  {  pThis->handle_size(he); return FALSE; }
          case HANDLE_SCROLL:           { SCROLL_PARAMS *p = (SCROLL_PARAMS *)prms; return pThis->handle_scroll(he, *p ); }

          default:
            assert(false);
        }
      return FALSE;
    }


Собсвенно это основа. Т.е. твой behavior это набор методов handle_mouse(), handle_draw() и пр.
Очень близко по своей идее к WinProc и WM_LBUTTONDOWN, WM_PAINT и пр.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.