Итак, давайте договоримся. По нажатию на левую кнопку новый эллипс, по нажатию на другую изменение размеров. Начнем с левой.
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
Можете из загрузить. Итак, правая редактирование, левая новый элипс. И пожалуйста попадайте внутрь при редактировании контура эллипса ;-)))