Шаг 106 - Щелчки мыши по OLE

Будем дальше мучать наш проект.

Итак, нам нужна функция в классе вида, которая бы смогла определить щелкнули мы на объекте OLE и возвратить на него указатель или мы щелкнули в стороне. Давайте создадим её и назовем OleClickTest.

class CTestOleContView : public CView
{
..........
// Implementation
public:
	CTestOleContCntrItem* OleClickTest(CPoint point);
	virtual ~CTestOleContView();
#ifdef _DEBUG
........
Теперь мы с Вами её и реализуем.
CTestOleContCntrItem* CTestOleContView::OleClickTest(CPoint point)
{
	CTestOleContCntrItem* testOle;
	testOle=m_pSelection;
	if (testOle!=NULL)
	{
           if (!testOle->m_Rect.PtInRect(point)) testOle=NULL;
	}
	return testOle;
}
Основа этой процедуры функция PtInRect, которая проверяет попала ли точка в объект CRect. Теперь надо создать реакцию на двойной щелчок мыши.
/////////////////////////////////////////////
// CTestOleContView message handlers

void CTestOleContView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
    CTestOleContCntrItem* testOle;
    testOle=OleClickTest(point);
    if (testOle!=NULL) testOle->DoVerb(OLEIVERB_PRIMARY,this); 
   CView::OnLButtonDblClk(nFlags, point);
}

Основа фунция DoVerb, которая позволяет инициализировать объект OLE.

Давайте проведем полевые испытания. Во-первых вставьте лист Excel, нажмите ESC, лист должен стать серым. Теперь двойной щелчок и вы опять сможете редактировать лист Excel. Вот работает. Есть возможность запустить Excel в отдельном окне. Для этого необходимо заменить константу в DoVerb на OLEIVERB_OPEN.


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