void container_wnd_proc (pstruct -w reply, p_program_state -&w state, p_msg msg)
                     if (msg->message == WM_DRAG_OVER)
{
  ...
}

void container_wnd_proc (pstruct -w reply, p_program_state -&w state, p_msg msg)
                     if (msg->message == WM_DRAG_LEAVE)
{
  ...
}

void container_wnd_proc (pstruct -w reply, p_program_state -&w state, p_msg msg)
                     if (msg->message == WM_DROP)
{
  ...
}

ulong wm_dragover container_wnd_proc (hdraginfo dg, p_draginfo dg')
{
  ...
}

void wm_drop container_wnd_proc (hdraginfo dg)
{
  for (i = 0; i < dg'->item_count; i ++)
  {
    drag_item = access_drag_item (dg, i);

    ...

    drag_render dr = {
                       draginfo : dg,
                       ...
                     };

    render_item (&dr, drag_item->id);

    ...

    complete_drag (dg, drag_item->id);
  }
}