Как изменить размер окна, встроенного в составной элемент управления

Фон

Я создал составной элемент управления, который используется для программного вставки другого элемента управления ActiveX. (Это «оболочка» другого элемента управления ActiveX)

Я следовал за шагами из этого руководства: http://support.microsoft.com/kb/218442.

Составной элемент управления будет содержать «окно», содержащее элемент управления ActiveX.

задача

Мне нужно программно управлять размером окна, находящегося в обертке.
Идея состоит в том, что если я знаю размер оболочки, я смогу также управлять размером окна. (например, высота обертки — 10)
Как я знаю, как это сделать до сих пор:

  1. Используйте эту функцию: IOleObject :: GetExtent (), чтобы получить размер оболочки
  2. Рассчитайте размер окна (используя значение из шага 1) и перейдите к функции Create ().

Проблема в том, что для создания окна мне нужно указать размер элемента управления «в клиентских координатах». Но кажется, что вывод из шага 1 не соответствует шагу 2.

Вопрос

Как я могу преобразовать выходные данные из шага 1 в соответствующие данные шага 2?
Или есть какой-то другой способ указать размер окна в составном элементе управления программно?

Вот мой простой код:

// Register the AtlAxWin class which implements ATL containment
// This is not needed for an ATL composite control
AtlAxWinInit();

// m_sizeExtent.cx and m_sizeExtent.cy is an output from step 1
RECT l_rect = {0, 0, m_sizeExtent.cx, m_sizeExtent.cy};

// m_hWnd is the composite control handle
// l_rect is the size of ActiveX control in client coordinates
CAxWindow l_hostedWnd;
l_hostedWnd.Create(m_hWnd,
l_rect,
_T("MetaStock.Chart.2"),
WS_CHILD | WS_VISIBLE,
0,
0U);

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector