Шаг 104 - Перемещение и изменение размеров объекта OLE

Берем наш проект из предыдущего шага. Вот на нем мы и поупражняемся. Нам теперь необходимо заставить его изменять размеры и передвигаться. Хранить рамку объекта мы будем в классе CRect. Вот его мы и добавим в класс CTestOleContCntrItem.

class CTestOleContCntrItem : public COleClientItem
{
.......	
public:
	CRect m_Rect;
	~CTestOleContCntrItem();
.......
Теперь в констукторе нам надо эту переменную инициализивать. Посмотреть значения можно в функции OnDraw.
void CTestOleContView::OnDraw(CDC* pDC)
{
	............
	if (m_pSelection != NULL)
		m_pSelection->Draw(pDC, CRect(10, 10, 210, 210));
}
Вот эти значения. Ими мы нашу переменную и инициализируем.
CTestOleContCntrItem::CTestOleContCntrItem(CTestOleContDoc* pContainer)
	: COleClientItem(pContainer)
{
	m_Rect=CRect(10,10,210,210);
}
Теперь и OnDraw можно изменить сославшись на m_Rect.
void CTestOleContView::OnDraw(CDC* pDC)
{
	........
	if (m_pSelection != NULL)
		m_pSelection->Draw(pDC, m_pSelection->m_Rect);
}
В классе CTestOleContCntrItem есть функция, которая возвращает видимый прямоугольник - OnGetItemPosition, надо чтобы она возвращала наш прямоугольник. Именно эта
void CTestOleContCntrItem::OnGetItemPosition(CRect& rPosition)
{
	ASSERT_VALID(this);
	rPosition = m_Rect;
}

И теперь нам надо сохранять значения при изменении позиции, это делается в OnChangeItemPosition

BOOL CTestOleContCntrItem::OnChangeItemPosition(const CRect& rectPos)
{
	ASSERT_VALID(this);
        m_Rect=rectPos;
	GetDucument()->SetModifiedFlag();
	GetDocument()->UpdateAllViews(NULL); 
	
	if (!COleClientItem::OnChangeItemPosition(rectPos))
		return FALSE;

	// TODO: update any cache you may have of the item's rectangle/extent

	return TRUE;
}

Можно запускать и проверять. Вот как это выглядит с листом Excel

104.gif (4448 b)

Если кратко. Мы с Вами используем функцию OnDraw вида для отображения объекта OLE функцию OnGetItemPosition для получения прямоугольника, и функцию OnChangeItemPosition для сохранения измененных размеров.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 10.02.2000