При старте нового обработчика будет автоматически завершен активный обработчик.
Но обычно диалог, имеющий интерактивный интерфейс, запускается сразу из обработчика
и при этом другие обработчики деактивизируются.
Ниже импровизация на тему.
Код |
---|
TSaveAsPictrByObject::TSaveAsPictrByObject(TPanTask* task, int ident) :
TPanAction(task, ident)
{
...
}
//-----------------------------------------------------------------
// Выполняется при инициализации класса
//-----------------------------------------------------------------
void TSaveAsPictrByObject::Setup()
{
...
if (MapWindow->IsObjectSelected())
{
// Объект уже выбран
// Здесь также вызывается Run()
SelectObject(MapWindow->ObjectInfo);
}
else
Run();
}
// --------------------------------------------------------------
// Установить сохраняемую область по объекту карты
// --------------------------------------------------------------
int TSaveAsPictrByObject::SelectObject(HOBJ info)
{
...
// Выполнить прикладную функцию
Run();
return 1;
}
//-----------------------------------------------------------------
// Выполняется после выбора границ фрагмента автоматически
//-----------------------------------------------------------------
int TSaveAsPictrByObject::Run()
{
DialogActive = 1;
// Вызвать диалог
int ret = CallDialog();
DialogActive = 0;
if (ret == 0)
{
// Компенсация сдвига изображения
MapWindow->Refresh();
Quit();
return 0;
}
if (Parm->Regime == XXXXXXX)
{
...
return 1; // Обработчик не отключать
}
if (Parm->Regime == YYYYY)
{
...
return 1; // Обработчик не отключать
}
Quit();
return 1;
}
//-----------------------------------------------------------------
// Вызвать диалог
//-----------------------------------------------------------------
int TSaveAsPictrByObject::CallDialog()
{
int ret = 0;
long int (WINAPI * lpfn_func)(HMAP, char*, SAVEASPICTRPARM*, TASKPARMEX*, HOBJ); // 14/11/05
HINSTANCE libinst = 0;
lpfn_func = (long int (WINAPI *)(HMAP, char*, SAVEASPICTRPARM*, TASKPARMEX*, HOBJ))
::mapLoadLibrary(MAPPICTRLIB,&libinst,
"LoadMapToPictureDialogEx");
if (lpfn_func != 0)
{
// Идентификатор окна карты
Parm->Handle = MapWindow->GetHandle();
ret = (*lpfn_func)((HMAP)MapDoc, (char*)&Title, Parm, MapWindow->GetTaskParmEx(), hObj);
}
// Выгрузка библиотеки
if (libinst)
mapFreeLibrary(libinst);
MapWindow->ChangeScale(1);
// Согласовать описание данных в памяти и на диске
// и обновить изображение
// Если изменений в памяти нет - возвращает ноль
MapWindow->AdjustData();
return ret;
}
|