Иллюстрированный самоучитель по Visual Studio.Net


Визуальное редактирование данных - часть 6


//=== Здесь мы используем операцию взятия нормы

//=== вектора, которую определили в классе CDPoint

if ( !(m_Poly.m_Points[i) - pt) <= 5e-2)

(

id = i;

break; // Нашли

}

}

//====== Возвращаем результат

return id;

}

В этот момент вы можете запустить приложение, выбрать шаблон Draw и проверить возможности визуального редактирования, перетаскивая вершины звезды в пределах клиентской области окна документа.

Включение или выключение второго режима редактирования, служащего для создания нового полигона и ввода координат вершин с помощью мыши, потребует меньше усилий, так как логика самого режима уже реализована в обработчике нажатия левой кнопки мыши. Для включения или выключения (toggle) второго режима используется одна и та же команда. Создайте обработчик команды Edit > New Poly. Для этого:

  1. Поставьте фокус на элемент CDrawView в представлении классов (Class View) и перейдите в окно Properties.

  2. Нажав кнопку Events, выберите идентификатор ID_EDIT_NEWPOLY, раскройте маркер (+) и выберите COMMAND (первую из двух выпавших строк).

  3. Создайте обработчик, выбрав <Add> в выпадающем списке справа от COMMAND.

Рис. 5.3. Редактируемый полигон

В теле обработчика следует установить флаги состояния, уничтожить все вершины дежурного полигона и перерисовать представление:

void CDrawView::OnEditNewpoly(void)

{

//====== Включаем/Выключаем режим ввода вершин

m_bNewPoints = !m_bNewPoints;

//=== Снимаем флаги редактирования перетаскиванием

m_bReady = false;

m_bLock = false;

//====== Если режим включен, то уничтожаем вершины

if (m_bNewPoints)

{

GetDocument()->m_Poly.m_Points.clear() ;

Invalidate();

}

}

Запустите приложение, выберите шаблон Draw и дайте команду Edit > New Poly. Щелкайте левой кнопкой мыши разные места клиентской области окна и наблюдайте за трансформациями полигона m_Poly при добавлении в контейнер его точек новых значений. Мысленно проследите за преобразованиями координат, которые происходят в эти моменты.Вы помните, что мышь дает аппаратные координаты, а в контейнер попадают World-координаты вершин полигона?




Начало  Назад  Вперед