Re[2]: Свойство AutoSize и все вытекающее из него
От: Alex_ros Россия  
Дата: 03.11.04 08:03
Оценка:
Здравствуйте, 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>


Большое спасибо! Все работает!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.