Дочерний элемент управления в ActiveX перемещается при прокрутке листа в Excel - PullRequest
0 голосов
/ 25 марта 2019

Сегодня я создал простой элемент управления ActiveX MFC. Моя цель состоит в том, чтобы вставить этот элемент управления в лист Excel и создать дочерний элемент управления с полем (или установить отступы ActiveX). Я не могу использовать C # и окна формы управления для этого (только C ++, это требования проекта)

Я создаю простой элемент управления MFC ActiveX и экспортирую 1 функцию - SetContent (HWND newContent), который должен внедрить любое окно в мой элемент управления ActiveX. Я хочу, чтобы это окно отображалось с полем.

https://pasteboard.co/I74MTVN.png - так выглядит элемент управления в начале

https://pasteboard.co/I74NW7T.png - вот как это выглядит, когда я начинаю прокручивать свой лист

Как вы видите, дочерний элемент управления (светло-зеленый) движется при прокрутке

void MyActiveXControl::SetContent(OLE_HANDLE newContent)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    if (this->m_lReadyState == READYSTATE_COMPLETE)
    {
        if (newContent != 0)
        {
            ::SetParent(HWND(newContent), this->GetSafeHwnd());
            int width, height;
            this->GetControlSize(&width, &height);
            ::MoveWindow(HWND(newContent), 10, 10, width - 20, height - 20, 0);
            m_content = HWND(newContent);
        }
    }
}

это только один пик кода, который выполняет манипуляции с управлением (в методе SetContent)

Это краска:

void MyActiveXControl::OnPaint()
{
    CRect rcBounds;
    CPaintDC pdc(this);
    this->GetClientRect(&rcBounds);
    pdc.FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(BLACK_BRUSH)));
}

Что я пробовал:

1) SetWindowPos вместо MoveWindow с различными флагами, такими как NOSIZE, NOMOVE и т. Д.

2) Переопределение сообщения OnSize - проблема в том, что событие size запускается 2 раза за 1 прокрутку:

 1. With actual ActiveX control size (width: 500, height: 500) 
 2. With the size of the area that is visible (width: 500, height: 250) 

Как я могу исправить свою проблему и предотвратить перемещение дочернего элемента управления внутри элемента ActiveX?

...