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