> Ирина
Ну вот пожалуй простейший. Реакция - печать имени команды:
#include "StdAfx.h"
#include "resource.h"
//-----------------------------
// Класс реактора
//-----------------------------
class CmdReactor : public AcEditorReactor {
protected:
bool mbAutoInitAndRelease ;
public:
CmdReactor (const bool autoInitAndRelease =true) ;
virtual ~CmdReactor () ;
virtual void Attach () ;
virtual void Detach () ;
//------------------------------------------------------
virtual void commandWillStart(const char * cmdStr);
virtual void commandEnded(const char * cmdStr);
virtual void commandCancelled(const char * cmdStr);
virtual void commandFailed(const char * cmdStr);
//------------------------------------------------------
} ;
CmdReactor::CmdReactor (const bool autoInitAndRelease) : AcEditorReactor(), mbAutoInitAndRelease(autoInitAndRelease) {
if (autoInitAndRelease) {
if (acedEditor) acedEditor->addReactor(this) ;
else mbAutoInitAndRelease = false ;
}
}
//-----------------------------------------------------------------------------
CmdReactor::~CmdReactor () {
Detach () ;
}
//-----------------------------------------------------------------------------
void CmdReactor::Attach () {
Detach () ;
if ( !mbAutoInitAndRelease ) {
if ( acedEditor ) {
acedEditor->addReactor (this) ;
mbAutoInitAndRelease = true ;
}
}
}
void CmdReactor::Detach () {
if ( mbAutoInitAndRelease ) {
if ( acedEditor ) {
acedEditor->removeReactor (this) ;
mbAutoInitAndRelease = false ;
}
}
}
void CmdReactor::commandWillStart(const char * cmdStr)
{
acutPrintf(_T("\nЗапущена команда: %s\n"), cmdStr);
AcEditorReactor::commandWillStart (cmdStr) ;
}
void CmdReactor::commandEnded(const char * cmdStr)
{
acutPrintf(_T("\nЗавершена команда: %s\n"), cmdStr);
AcEditorReactor::commandEnded (cmdStr) ;
}
void CmdReactor::commandCancelled(const char * cmdStr)
{
acutPrintf(_T("\nОтменена команда: %s\n"), cmdStr);
AcEditorReactor::commandCancelled (cmdStr) ;
}
void CmdReactor::commandFailed(const char * cmdStr)
{
acutPrintf(_T("\nНе смогла выполнится команда: %s\n"), cmdStr);
AcEditorReactor::commandFailed (cmdStr) ;
}
//------------------------------------
//------- Класс приложения
//------------------------------------
class CCmdReactApp : public AcRxArxApp {
private:
static CmdReactor *pReact;
public:
CCmdReactApp () : AcRxArxApp () {}
virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;
return (retCode) ;
}
virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
// При выгрузке приложения если реактор был создан - удалим его
if (pReact) delete pReact;
AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;
return (retCode) ;
}
virtual void RegisterServerComponents () {}
// Обработчик команды STARTREACT
static void CmdReactSTARTREACT(void)
{
if (!pReact) {
pReact = new CmdReactor();
if (pReact) {
acutPrintf(_T("\nСоздали реактор!"));
} else {
acutPrintf(_T("\nНе удалось создать реактор!"));
}
} else {
acutPrintf(_T("\nРеактор уже был создан!"));
}
}
// Обработчик команды STOPREACT
static void CmdReactSTOPREACT(void)
{
if (pReact) {
delete pReact;
acutPrintf(_T("\nУдалили реактор!"));
} else {
acutPrintf(_T("\nРеактор уже был удален или не был создан!"));
}
pReact = NULL;
}
} ;
CmdReactor * CCmdReactApp::pReact = NULL;
//-----------------------------------------------------------------------------
IMPLEMENT_ARX_ENTRYPOINT(CCmdReactApp)
ACED_ARXCOMMAND_ENTRY_AUTO(CCmdReactApp, CmdReact, STARTREACT, STARTREACT, ACRX_CMD_TRANSPARENT, NULL)
ACED_ARXCOMMAND_ENTRY_AUTO(CCmdReactApp, CmdReact, STOPREACT, STOPREACT, ACRX_CMD_TRANSPARENT, NULL)
// -----------------------------------------------------------------------------