Re[5]: Размер ActiveX в Design time
От: Myth  
Дата: 18.04.01 06:30
Оценка:
Здравствуйте Vasily, 17.04.2001 01:29:31

Почему не будет выполнятся?
В конструкторе нужно проинициализировать m_bInited = FALSE.
OnCreate вызывается всегда один раз! После того как отработает функция SetControlSize,
устанавливаем m_bInited = TRUE. И тогда OnSetExtent всегда будет возвращать FALSE.
Я проверил у меня все работает.

int CErrorDlgCtrl::CErrorDlgCtrl()
{
.....
m_bInited = false;
}

int CErrorDlgCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;

// OnSetExtent вызовит COleControl::OnSetExtent(lpSizeL)
SetControlSize(40, 40);

m_bInited = true; // Теперь OnSetExtent всегда возвращает false

return 0;
}

BOOL CErrorDlgCtrl::OnSetExtent(LPSIZEL lpSizeL)
{
if (m_bInited)
return FALSE;
else
return COleControl::OnSetExtent(lpSizeL);

}


>Здравствуйте Myth, 17.04.2001 00:41:26 вы писали:

>
>Myth, если использовать Ваш алгоритм, то контрол ведет себя также, как и в случае, который
>был описан Вами до этого. Ведь сторока
>return COleControl::OnSetExtent(lpSizeL) вообще никогда не выполнится.
>
>На сколько я понял, то COleControl::OnCreate класса предка должен вызваться только один раз
>при создании компонента.
>тогда чтобы это работало надо написать так:
>
>int CErrorDlgCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
>{
> if (COleControl::OnCreate(lpCreateStruct) == -1)
> return -1;
> SetControlSize(40, 40);
> m_bInited = TRUE;
> return 0;
>}
>
>BOOL CErrorDlgCtrl::OnSetExtent(LPSIZEL lpSizeL)
>{
> if (m_bInited)
> {
> m_bInited = FALSE;
> return COleControl::OnSetExtent(lpSizeL);
> }
> else
> return FALSE;
>}
>
>Но например, если в VB я кладу его наформу, выбрав в меню компонентов и затем растянув
>на ворме, то первоначально он принимает размер, на который я его растянул, а не тот, который
>указан в SetControlSize. А вот потом уже ведет себя так, как мне надо (не позволяет изменение расмера).
>А если его тыстировать в ActiveX Control Test Container, то вообще себя странно ведет.
>
>Или я что-то не понял?
>
>
>>Здравствуйте vasily, 16.04.2001 08:16:55
>>
>>Действительно ошибачка вышла, правильто так будет:
>>
>>int CErrorDlgCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
>>{
>> if (COleControl::OnCreate(lpCreateStruct) == -1)
>> return -1;
>>
>> SetControlSize(40, 40);
>>
>> m_bInited = true;
>>
>> return 0;
>>}
>>
>>BOOL CErrorDlgCtrl::OnSetExtent(LPSIZEL lpSizeL)
>>{
>> if (m_bInited)
>> return FALSE;
>> else
>> return COleControl::OnSetExtent(lpSizeL);
>>
>>}
>>
>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.