Шаг 154 - Много элипсов шаг 3

Итак, давайте договоримся. По нажатию на левую кнопку новый эллипс, по нажатию на другую изменение размеров. Начнем с левой.

void CTestEllipseView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	CTestEllipseDoc* pDoc = GetDocument();
	CMyDialog cm;

	cm.m_X1 = 0;
	cm.m_Y1 = 0;
	cm.m_X2 = 100;
	cm.m_Y2 = 100;

        if (cm.DoModal()==IDOK)
	{
		pDoc->cEllipce.Add(CRect(cm.m_X1,cm.m_Y1,cm.m_X2,cm.m_Y2));
		pDoc->UpdateAllViews(NULL); 
	}

	CView::OnLButtonDown(nFlags, point);
}

Класс этого диалога знаком из прошлых шагов. Только теперь при выборе кнопки OK производится добавление новых данных в контейнер и обновляются все виды.

По нажатию на правую кнопку необходимо провести редактирование. Вот код.

void CTestEllipseView::OnRButtonDown(UINT nFlags, CPoint point) 
{
    CTestEllipseDoc* pDoc = GetDocument();
 
	int x=0;
        x=pDoc->cEllipce.FindEllipce(point);
if (x!=-1)
 {
	CMyDialog cm;
	cm.m_X1 = pDoc->cEllipce.Get(x).left;
	cm.m_Y1 = pDoc->cEllipce.Get(x).top;
	cm.m_X2 = pDoc->cEllipce.Get(x).right;
	cm.m_Y2 = pDoc->cEllipce.Get(x).bottom;
	
	if (cm.DoModal()==IDOK)
	{
		pDoc->cEllipce.SetData(x,CRect(cm.m_X1,cm.m_Y1,cm.m_X2,cm.m_Y2));
		pDoc->UpdateAllViews(NULL); 
	}
   }
	CView::OnRButtonDown(nFlags, point);
}

Берем точку и ищем в элипсе. Если найдена, то передаем эти параметры в окно диалога и при выходе из диалога меняем данные в контейнере. Обновляем виды.

При тестировании не перепутайте клавиши !!! Очень Вас прошу. В проекте, который Вы можете загрузить лежат несколько моих файлов:

a.aaa
a1.aaa

Можете из загрузить. Итак, правая редактирование, левая новый элипс. И пожалуйста попадайте внутрь при редактировании контура эллипса ;-)))


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