Здравствуйте, 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>
Большое спасибо! Все работает!