C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 104 - Перемещение и изменение размеров объекта OLE / MFC шаг за шагом / Visual C++

Шаг 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 для сохранения измененных размеров.


Загрузить проект | | |
Автор Каев Артем.
[AD]