Обработка нажатия ESC или "Авторам долгодумающих плагинов посвящается..."
Иван Синтюрин ?subject=Articles">
[email protected]
Очередное воззвание к народу:
ДЕЛАЙТЕ ПЛАГИНЫ ИНТЕРАКТИВНЫМИ!
Это в общем, а в частном...
Написали вы свой супер-пупер-мега-плагин. Замечательно! Если он делает своё тёмное/светлое :-) дело быстро, за доли секунды, то можете дальше не читать. А если некоторые операции, осуществляемые плагином, требуют определённого времени, то следует обязательно обрабатывать в плагине нажатие ESC (или чего-нибудь ещё).
Зачем? Пользователь - существо странное, вдруг он запустил ваш плагин по ошибке (или тот самостоятельно запустился, что не меняет сути дела) или сознательно, но резко передумал. Как ему быть в данной ситуации? FAR убивать? А плагин думает, работает, а пользователь волосы на себе рвёт и проклинает Вас. Выход прост - плагин должен реагировать (интерактивность!) на нажатие клавиши «ESC» (Escape - бегство, бурж.). Для этого можно использовать, например, следующую функцию (за основу взята функция из файла Examples\MultiArc\ARCMIX.CPP):
bool CheckForEsc(void) { bool EC=false; INPUT_RECORD rec; static HANDLE hConInp=GetStdHandle(STD_INPUT_HANDLE); DWORD ReadCount; while (1) { PeekConsoleInput(hConInp,&rec;,1,&ReadCount;); if (ReadCount==0) break; ReadConsoleInput(hConInp,&rec;,1,&ReadCount;); if (rec.EventType==KEY_EVENT) if (rec.Event.KeyEvent.wVirtualKeyCode==VK_ESCAPE && rec.Event.KeyEvent.bKeyDown) EC=true; } return(EC); }
Дальше, где нужно, пишем что-то типа:
... if(CheckForEsc()) ... //реакция на нажатие ESC, например, выход из плагина else ... //работаем дальше ...
That's all, folks :-)
13.12.1999
Rev. 06.09.2000