Здравствуйте, Alex_ros, Вы писали:
A_>Доброе время суток!
A_>Вводная:
A_>Имеется ALT-проект реализующий Full Control. В фунции OnDraw происходит отрисовка текстовой строки. При установке свойства AutoSize необходимо чтобы ActiveX элемент занимал на форме столько места, сколько необходимо для отображения всей строки (принцип работы аналогичного свойтсва в компоненте Label в VB). Так вот, я вычисляю габаритные размеры строки, записываю их в m_sizeExtent. Но тестируя разрабатываемый компонент в VB получат такой эффект... При установке AutoSize в True, габаритные маркеры моего компонента не изменяют своего положения (ожидалось что они будут охватывать набранную строку, по ее реальным размерам), а ожидаемый эффект получаеться если потянуть за один из габаритных маркеров.
A_>Кто-нибудь знает в чем причина такого поведения?
Нужно сказать ClientSite что у тебя поменялись твои размеры
CComPtr<IOleInPlaceSite> spCtlSite;
HRESULT hr = InternalGetSite(IID_IOleInPlaceSite, (void**)&spCtlSite);
if (SUCCEEDED(hr))
{
if (spCtlSite != NULL)
{
long cy = CalcHeight();
RECT rcPos;
::CopyRect(&rcPos, &m_rcPos);
// считаем размер
rcPos.bottom = rcPos.top + cy;
// извещаем хост о изменении
hr = spCtlSite->OnPosRectChange (&rcPos);
}
}
... << RSDN@Home 1.1.4 beta 3 rev. 214>>