Re: Может ли повторяться значение HELEMENT?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 16.11.07 18:14
Оценка: +1
Здравствуйте, michael-programmer, Вы писали:

HELEMENT — указатель на память. У двух одинаковых повторяться не может. Действителен пока существует элемент. Не может меняться у уже существующего элемента.
A journey of a thousand miles must begin with a single step © Lau Tsu
Может ли повторяться значение HELEMENT?
От: michael-programmer Россия  
Дата: 16.11.07 14:15
Оценка:
Вопросы по HELEMENT:
1. Может ли значение HELEMENT повторно назначаться новым элементам DOM, если я обильно модифицирую HTML в рамках работы с одним окном?
2. Можно ли ожидать, что для одного и того же элемента DOM всегда будет возвращаться одно и то же значение HELEMENT, даже если я НЕ увеличиваю количество внешних ссылок?
--
И просто интересно — чем является HELEMENT "под капотом"?
Прямой указатель на внутреннюю структуру? Или, может быть, индекс в некоем массиве указателей?
Или же оно есть значение некоего счетчика, которое храниться в некоей таблице соответствий?
Re: Может ли повторяться значение HELEMENT?
От: c-smile Канада http://terrainformatica.com
Дата: 16.11.07 17:42
Оценка:
Здравствуйте, michael-programmer, Вы писали:

MP>Вопросы по HELEMENT:

MP>1. Может ли значение HELEMENT повторно назначаться новым элементам DOM, если я обильно модифицирую HTML в рамках работы с одним окном?

Теоретически — да. См. ниже.

MP>2. Можно ли ожидать, что для одного и того же элемента DOM всегда будет возвращаться одно и то же значение HELEMENT, даже если я НЕ увеличиваю количество внешних ссылок?


HELEMENT это обычный указатель на reference counted object:

Скажем вот имплементация внешнего метода HTMLayoutFindElement

//|
//| HTMLayoutFindElement 
//|
HLDOM_RESULT HLAPI HTMLayoutFindElement(HWND hwnd, POINT pt, HELEMENT* phe)
{
  html::layout_view* pview = html::layout_view::ptr(hwnd);
  if(!pview)
    return HLDOM_INVALID_HWND;
  if(!phe)
    return HLDOM_INVALID_PARAMETER;

  critical_section cs(pview->_guard);

  html::block* b = pview->find_block(gool::point(pt.x,pt.y));
  if(b)
    *phe = b;
  else
    *phe = 0;
  return HLDOM_OK;
}


Как ты видишь я просто возвращаю указаьель на свой внутренний class html::block элемент.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.