Свойство AutoSize и все вытекающее из него
От: Alex_ros Россия  
Дата: 01.11.04 12:26
Оценка:
Доброе время суток!

Вводная:

Имеется ALT-проект реализующий Full Control. В фунции OnDraw происходит отрисовка текстовой строки. При установке свойства AutoSize необходимо чтобы ActiveX элемент занимал на форме столько места, сколько необходимо для отображения всей строки (принцип работы аналогичного свойтсва в компоненте Label в VB). Так вот, я вычисляю габаритные размеры строки, записываю их в m_sizeExtent. Но тестируя разрабатываемый компонент в VB получат такой эффект... При установке AutoSize в True, габаритные маркеры моего компонента не изменяют своего положения (ожидалось что они будут охватывать набранную строку, по ее реальным размерам), а ожидаемый эффект получаеться если потянуть за один из габаритных маркеров.

Кто-нибудь знает в чем причина такого поведения?
Re: Свойство AutoSize и все вытекающее из него
От: migel  
Дата: 01.11.04 15:12
Оценка: 5 (2)
Здравствуйте, 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>>
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...
Пока на собственное сообщение не было ответов, его можно удалить.