SuperMiQi Ответов: 0

Как автоматически настроить элемент управления MFC ole на странице word 2013


Всем Привет,

Я создал элемент управления MFC ole В c++, и у меня есть проблема, когда я вставляю элемент управления на пустую страницу Word (Word 2013), он больше размера страницы.

Если я уменьшу рисунок, прежде чем скопировать его в буфер обмена, он будет работать нормально.

Я видел событие под названием :
BOOL CMeasGraphCtrl::OnSetExtent(LPSIZEL lpSizeL)
но я не получаю доступ к размеру прямоугольника клиентского сайта во время процедуры вставки.

Интересно, если кто-то уже работал в этой области, чтобы уменьшить размер элемента управления, если он находится за пределами размера контейнера клиента.

Как достичь "размера контейнера", чтобы правильно настроить его под размер контейнера ?
Есть ли у кого-нибудь идея, как автоматически настроить размер элемента управления ?

Заранее Вам большое спасибо.
С уважением,
Мики

Что я уже пробовал:

Я провел следующий эксперимент:

BOOL CMeasGraphCtrl::OnSetExtent(LPSIZEL lpSizeL)
{
	BOOL	bRet = FALSE;
	if (m_bChangingExtent)  // Prevent infinite recursion!
		return FALSE;

        // after converting lpSizeL to pixels, it returns me the correct size of the control I copied on the winform window.

	SIZEL sizeHiMetric;
	_AfxXformSizeInHimetricToPixels(NULL, lpSizeL, &sizeHiMetric);

	SIZEL sizeExtentPixels;
	SIZEL sizeExtentHimetric;
	sizeExtentPixels.cx = m_cxExtent;
	sizeExtentPixels.cy = m_cyExtent;
	_AfxXformSizeInPixelsToHimetric(NULL, &sizeExtentPixels, &sizeExtentHimetric);

	int cx, cy;
	SIZEL controlSizePixels;
	SIZEL controlSizHiMetric;
	GetControlSize(&cx, &cy);
	controlSizePixels.cx = cx;
	controlSizePixels.cy = cy;
	_AfxXformSizeInPixelsToHimetric(NULL, &controlSizePixels, &controlSizHiMetric);
        
        // I never get a valid pointer to this information (it remains null).
	if (m_pInPlaceSite != nullptr)
	{
		RECT rcClientRect;
		GetClientRect(&rcClientRect);



		SIZEL controlSize;
		SIZEL controlSizeHiMetric;

		controlSize.cx = cx;
		controlSize.cy = cy;
		AtlPixelToHiMetric(&controlSize, &controlSizeHiMetric);

		RECT rcRectInContainer;
		GetRectInContainer(&rcRectInContainer);

		ClipCaretRect(&rcRectInContainer);
	}

	bRet = COleControl::OnSetExtent(lpSizeL);

	return bRet;
}

0 Ответов