G I S   T o o l K i t
Справочник программиста

Главная | MAPAPI | PANAPI | Примеры
 

 
МЕТОДЫ КЛАССА "ОБРАБОТЧИК КОМАНДЫ УПРАВЛЕНИЯ" (TpanAction)

Объявлены: panact.h   Реализация: pantask.cpp

 

Конструктор и деструктор

 

TpanAction::TpanAction

Создать объект "обработчик команды".
Если обработчик должен начать работу с диалога, то диалог должен создаваться в Setup() ... 

 
public:

TpanAction::(TPanTask * task,int ident)

 

 

TpanAction::~TpanAction

Удалить обработчик и освободить все ресурсы.
Результаты работы здесь не сохраняются! 

 
public:

virtual ~TpanAction::()

 

 

Методы управления обработчиком команд

 

TpanAction::Setup

Выполнить настройку обработчика.
Вызывается после вызова конструктора.

 
public:

virtual void Setup()

{

  Comment();

}

 

 

TpanAction::GetSelectObjectType

Запросить способ выбора объекта.
Без диалога "Выбор объекта" - не ноль, иначе – ноль.

 
public:

virtual int GetSelectObjectType()

{

  return 1;

}

 

 

TpanAction::SetTaskAction

Установить адрес обработчика в задаче.
Вызывается автоматически после конструктора.

 
public:

virtual void SetTaskAction()

{

  if (Task()) Task()->Action = this;

}

 

 

TpanAction::ClearTaskAction

Удалить адрес обработчика в задаче.
Вызывается автоматически.

 
public:

virtual void ClearTaskAction()

{

  if (Task()) Task()->Action = 0;

}

 

 

TpanAction::GetActionHandle

Запросить идентификатор обработчика.

 
public:

HMAPACTION GetActionHandle()

{

  return HAction;

}

 

 

TpanAction::CallHelp

Запрос справки о текущем режиме работы (F1).

 
public:

virtual void CallHelp()

{

  ActionTask->CallHelp(Ident());

}

 

 

TpanAction::CanClose

Запрос: можно ли отключить обработчик команды.
Если разрешено - будет вызван деструктор обработчика. Перед выдачей разрешения можно сохранить результаты работы обработчика ...
Задача может удалить обработчик, не вызывая CanClose()!

 
public:

virtual int CanClose()

{

  return 1;

}

 

 

TpanAction::CanCloseDoc

Запросить: можно ли закрыть окно и отключить обработчик команды.
Если разрешено - будет вызван деструктор обработчика. Перед выдачей разрешения можно сохранить результаты работы обработчика.
Задача может удалить обработчик, не вызывая CanClose()!

 
public:

virtual int CanCloseDoc()

{

  return CanClose();

}

 

 

TpanAction::CanRestartByButton

Запрос: можно ли перезапустить обработчик при повторном нажатии кнопки. Если не разрешено – будет выполняться закрытие обработчика (CanClose() ...).

 
public:

virtual int CanRestartByButton()

{

  return 0;

}

 

 

TpanAction::Ident

Запросить идентификатор обрабатываемой команды.

 
public:

int Ident()

{

  return ActionIdent;

}

 

 

TpanAction::CancelNotify

Извещение о том, что обработчик будет завершен в результате повторного нажатия его кнопки.
Вызывается, если разрешил CanClose(). Применяется для обеспечения перезапуска обработчика (Restart()).

 
public:

virtual void CancelNotify() {  }

 

 

TpanAction::Task

Запросить задачу, которой принадлежит обработчик.

 
public:

TPanTask * Task()

{

  return ActionTask;

}

 

 

TpanAction::Close

Выполнить самоликвидацию (вызов деструктора) с сохранением результатов работы. Метод CanClose() вызывается.

 
protected:

void Close()

{

  if (ActionTask) ActionTask->CloseAction(Ident());

}

 

 

TpanAction::Quit

Выполнить самоликвидацию (вызов деструктора) без сохранения результатов работы.
Метод CanClose() не будет вызываться!
После этой функции нельзя использовать переменные класса - его уже нет!

 
protected:

void Quit()

{

  if (ActionTask) ActionTask->DestroyAction(Ident());

}

 

 

TpanAction::Restart

Выполнить перезагрузку обработчика (вызов деструктора и затем конструктора) без сохранения результатов работы. Метод CanClose() не будет вызываться!

 
protected:

void Restart()

{

  if (ActionTask) ActionTask->RestartAction(Ident());

}

 

 

Справочные данные об окне карты и приложении

 

TpanAction::GetMapWindowPoint

Запросить координаты верхнего левого угла окна в логической системе карты (Map) в дискретах.

 
public:

DOUBLEPOINT * GetMapWindowPoint()

{

   return MapWindow->GetMapWindowPoint();

}

 

 

TpanAction::GetMapWindowHandle

Запросить идентификатор окна карты.

 
public:

HWND GetMapWindowHandle()

{

  return MapWindow->GetHandle();

}

 

 

TpanAction::GetMapWindowClientRect

Запросить размеры клиентной области окна карты.

 
public:

RECT GetMapWindowClientRect()

{

  return MapWindow->GetClientRect();

}

 

 

Методы обработки прикладных событий окна карты

 

TpanAction::ChangeData

Извещение об изменении содержания данных (карт, растров, матриц ...).
Если активен обработчик - проверить, что он не работает c закрытыми данными.

 
public:

virtual void ChangeData()  {  }

 

 

TpanAction::CanSelectObject

Запрос: можно ли выполнить выбор нового объекта на карте для обработки.
Обработчик карты выполнит выбор объекта в точке нажатия левой кнопки мышки, если CanSelectObject() возвращает ненулевое значение.

 
public:

virtual int CanSelectObject()

{

  return 1;

}

 

 

TpanAction::CanSelectThisObject

Запрос: можно ли выполнить выбор данного объекта на карте для обработки.
Может вызываться до выполнения Setup().
Например: можно ли удалить данный объект и т.п.

 
public:

virtual int CanSelectThisObject(HOBJ  )

{

  return 1;

}

 

 

TpanAction::CanUnionGroupData

Запрос: можно ли выполнить сборку группы для данного объекта карты.
Запрет применяется только для отдельных операций над составом группы!

 
public:

virtual int CanUnionGroupData(HOBJ)

{

  return 1;

}

 

 

TpanAction::Commit

Сообщение о завершении обработки объекта.

 
public:

virtual int Commit()

{

  return 0;

}

 

 

TpanAction::ActiveObject

Извещение: активизирован объект.
Происходит между запросом CanSelectThisObject() и извещением SelectObject()). Позволяет перебирать объекты с одного нажатия кнопкой мышки. Для программного перехода к следующему / предыдущему объекту применяются методы MapWindow->NextActiveObject() и MapWindow->PrevActiveObject(). Обработчик может накапливать выбранные объекты для совместной обработки:
TObjectInfo * Target = new TObjectInfo(info);

 
public:

virtual int ActiveObject(HOBJ)

{

  return 0;

}

 

 

TpanAction::SelectObject

Извещение: выполнен выбор объекта.

Обработчик может накапливать выбранные объекты для совместной обработки.

 
public:

virtual int SelectObject(HOBJ)

{

  return 0;

}

 

 

TpanAction::Revert

Сообщение об отмене обработки объекта.
Выполняется отключение обработчика!

 
public:

virtual int Revert()

{

  return 0;

}

 

 

Методы обработки системных событий окна карты

 

TpanAction::KeyDown

Извещение: нажата клавиша.
Параметры:
key - идентификатор нажатой клавиши (описаны в winuser.h);
repeatCount - количество повторов (если пользователь удерживает клавишу);
flags - флаги, соответствует значениям сообщения WM_KEYDOWN.
Если событие не обрабатывается и может быть передано обработчику окна карты  - возвращается 0.

 
public:

virtual int KeyDown(UINT /*key*/, UINT /*repeatCount*/, UINT /*flags*/)

{

  return 0;

}

 

 

TpanAction::LeftDown

Извещение: нажата левая кнопка мыши.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в winuser.h);
point - координаты точки, в которой находится курсор, в системе координат окна;
Если событие не обрабатывается и может быть передано обработчику окна карты  - возвращается 0.

 
public:

virtual int LeftDown(UINT /*modKeys*/, POINT& /*point*/)

{

  return 0;

}

 

 

TpanAction::LeftUp

Извещение: отпущена левая кнопка мыши.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в winuser.h);
point - координаты точки, в которой находится курсор, в системе координат окна;
Если событие не обрабатывается и может быть передано обработчику окна карты  - возвращается 0.

 
public:

virtual int LeftUp(UINT /*modKeys*/, POINT& /*point*/)

{

  return 0;

}

 

 

TpanAction::Move

Извещение: перемещение мышки по окну.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в winuser.h);
point - координаты точки, в которой находится курсор, в системе координат окна;
Если событие не обрабатывается и может быть передано обработчику окна карты  - возвращается 0.

 
public:

virtual int Move(UINT /*modKeys*/, POINT& /*point*/)

{

  return 0;

}

 

 

TpanAction::RightDown

Извещение: нажата правая кнопка мыши. 
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в winuser.h);
point - координаты точки, в которой находится курсор, в системе координат окна;
Если событие не обрабатывается и может быть передано обработчику окна карты  - возвращается 0.
Если возвращает ненулевое значение - всплывающее меню блокируется (не всплывает).
Может применяться, когда правая кнопка нажимается вместе с клавишами ALT,CNTRL и т.п.

 
public:

virtual int RightDown(UINT /*modKeys*/, POINT& /*point*/)

{

  return 0;

}

 

 

TpanAction::RightUp

Извещение: отпущена правая кнопка мыши.
Параметры:
modKeys - идентификатор нажатой клавиши клавиатуры (описаны в winuser.h);
point - координаты точки, в которой находится курсор, в системе координат окна;
Если событие не обрабатывается и может быть передано обработчику окна карты  - возвращается 0.

 
public:

virtual int RightUp(UINT /*modKeys*/, POINT& /*point*/)

{

  return 0;

}

 

 

TpanAction::CallPopupMenu

Добавить пункты меню для текущей операции.
Всплывающее меню при нажатии правой кнопки мышки.
Если событие не обрабатывается и может быть передано обработчику окна карты  - возвращается 0.

 
public:

int CallPopupMenu(HMENU hmenu)

{

  TMENU Tmenu(hmenu); return CallRightMenu(&Tmenu);

}

 

 

TpanAction::CallRightMenu

Добавить пункты меню для текущей операции.
Всплывающее меню при нажатии правой кнопки мышки.
Если событие не обрабатывается и может быть передано обработчику окна карты  - возвращается 0.

 
public:

virtual int CallRightMenu(TMENU * /*Menu*/)

{

  return 0;

}

 

 

TpanAction::Paint

Извещение:  обработчик может рисовать "на карте" (карта уже нарисована ...).
Параметры:
dc - контекст-устройства вывода;
erase - флаг очистки области, перед рисованием;
rect - координаты прямоугольной области, которая перерисовывается.
Если событие не обрабатывается и может быть передано обработчику окна карты  - возвращается 0.

 
public:

virtual int Paint(THDC& dc, bool erase, TRECT& rect)

{

  return 0;

}

 

 

TpanAction::ResetMessage

Запрос на перевывод комментария текущей операции обработчика. Вызывается автоматически после выполнения Setup(), при получении фокуса и изменении кода языка. Обработчик может выполнить MapWindow->SetMessage(....).

 
public:

virtual void ResetMessage()

{

  Comment();

}

 

 

TpanAction::Comment

Запрос на перевывод комментария текущей операции обработчика. Синоним ResetMessage(). Обработчик может выполнить MapWindow->SetMessage(....).

 
public:

virtual void Comment() {  }

 

 

TpanAction::IdleAction

Сообщение о том, что обработчик может выполнить фоновый процесс.

 
public:

virtual void IdleAction(long count) {  }

 

 

Запрос координат текущей точки при обработке событий окна карты

 

TpanAction::GetPicturePoint

Запросить координаты в системе изображения (Picture).
Возвращает координаты текущей точки в пикселах.

 
public:

POINT * GetPicturePoint()

{

  return ActionTask->GetPicturePoint();

}

 

 

TpanAction::GetMapPoint

Запросить координаты в логической системе карты (Map).
Возвращает координаты текущей точки в дискретах.

 
public:

DOUBLEPOINT * GetMapPoint()

{

  return ActionTask->GetMapPoint();

}

 

 

TpanAction::GetPlanePoint

Запросить координаты в прямоугольной местной системе (Plane).
Возвращает координаты текущей точки в метрах.

 
public:

DOUBLEPOINT * GetPlanePoint()

{

  return ActionTask->GetPlanePoint();

}

 

 

TpanAction::GetGeoPoint

Запросить координаты в географической системе (Geo).
Возвращает координаты текущей точки в радианах.
Если географическая система координат не поддерживается значение координат всегда ноль!

 
public:

DOUBLEPOINT * GetGeoPoint()

{

  return ActionTask->GetGeoPoint();

}

 

 

TpanAction::IsGeoSupported

Проверка поддержки географических координат.
Если не поддерживаются – функция возвращает ноль.

 
public:

int IsGeoSupported()

{

  return ActionTask->IsGeoSupported();

}

 

 
 

Касьянов О.В.
info@panorama.kharkov.ua

bigmir)net TOP 100