admin 发表于 2024-3-14 20:33:27

[每日一码] 如何创建自己的NEW命令 [复制链接]

// NewDwg.cpp : Initialization functions
#include "StdAfx.h"
#include "StdArx.h"
#include "resource.h"HINSTANCE 采用hdllInstance =NULL ;// This command registers an ARX command.
void AddCommand(const char* cmdGroup, const char* cmdInt, const char* cmdLoc,
    const int cmdFlags, const AcRxFunctionPtr cmdProc, const int idLocal = -1);// NOTE: DO NOT edit the following lines.
//{{AFX采用ARX采用MSG
void InitApplication();
void UnloadApplication();
//}}AFX采用ARX采用MSG// NOTE: DO NOT edit the following lines.
//{{AFX采用ARX采用ADDIN采用FUNCS
//}}AFX采用ARX采用ADDIN采用FUNCS
/////////////////////////////////////////////////////////////////////////////
// DLL Entry Point
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
   if (dwReason == DLL采用PROCESS采用ATTACH){
      采用hdllInstance = hInstance;
   }
   else if (dwReason == DLL采用PROCESS采用DETACH) {
   }
   return TRUE;    // ok
} /////////////////////////////////////////////////////////////////////////////
// ObjectARX EntryPoint
extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
{
   switch (msg) {
      case AcRx::kInitAppMsg:
         // Comment out the following line if your
         // application should be locked into memory
         acrxDynamicLinker->unlockApplication(pkt);
         acrxDynamicLinker->registerAppMDIAware(pkt);
         InitApplication();
         break;
      case AcRx::kUnloadAppMsg:
         UnloadApplication();
         break;
   }
   return AcRx::kRetOK;
}// Init this application. Register your
// commands, reactors...
void InitApplication()
{
   // NOTE: DO NOT edit the following lines.
   //{{AFX采用ARX采用INIT
   AddCommand("ASDKMYNEW", "MYNEW", "MYNEW", ACRX采用CMD采用MODAL, mynewmynew);
   //}}AFX采用ARX采用INIT   // TODO: add your initialization functions}// Unload this application. Unregister all objects
// registered in InitApplication.
void UnloadApplication()
{
   // NOTE: DO NOT edit the following lines.
   //{{AFX采用ARX采用EXIT
   acedRegCmds->removeGroup("ASDKMYNEW");
   //}}AFX采用ARX采用EXIT   // TODO: clean up your application
}// This functions registers an ARX command.
// It can be used to read the localized command name
// from a string table stored in the resources.
void AddCommand(const char* cmdGroup, const char* cmdInt, const char* cmdLoc,
const int cmdFlags, const AcRxFunctionPtr cmdProc, const int idLocal)
{
   char cmdLocRes;   // If idLocal is not -1, it's treated as an ID for
   // a string stored in the resources.
   if (idLocal != -1) {      // Load strings from the string table and register the command.
      ::LoadString(采用hdllInstance, idLocal, cmdLocRes, 64);
      acedRegCmds->addCommand(cmdGroup, cmdInt, cmdLocRes, cmdFlags, cmdProc);   }
   else
      // idLocal is -1, so the 'hard coded'
      // localized function name is used.
      acedRegCmds->addCommand(cmdGroup, cmdInt, cmdLoc, cmdFlags, cmdProc);
} // NewDwgCommands.cpp
// ObjectARX defined command#include "StdAfx.h"
#include "StdArx.h"// This is command 'MYNEW'


普通浏览复制代码
void mynewmynew()
{
   // TODO: Implement the command
   const TCHAR newFile[] = "Drawing.dwg";
   const TCHAR dwtFile[] = "Template\\Acad.dwt";
   TCHAR dwtPath [ MAX采用PATH ], *pLastSlash = NULL;
   HMODULE hAcad = NULL;
   // Get the Template file/pathname by:
   //   get the pathname of the AutoCAD executable
   //   find the final backslash
   //   copy the template directory name and the template filename (e.g."Template\\Acad.dwt")
   //       onto this path after the final backslash
   // Copy this file to the destination path
   // Open this file in the AutoCAD editor
   if ( NULL == ( hAcad = ::GetModuleHandle (采用T("acad.exe"))))
      acutPrintf( "\nCannot get handle to AutoCAD's executable!" );
   else if ( !::GetModuleFileName( hAcad, dwtPath, MAX采用PATH ))
      acutPrintf( "\nCannot get AutoCAD's location!" );
   else if ( NULL == ( pLastSlash = strrchr( dwtPath, '\\' )))
      acutPrintf( "\nCannot extract AutoCAD's path!" );
   else if ( (pLastSlash - dwtPath) + strlen( dwtFile ) > MAX采用PATH )
      acutPrintf( "\nPath too long to get template path!" );
   else {
      strcpy( pLastSlash + 1, dwtFile );
      // Do not overwrite file if it already exists (could do further checking here)
      if ( !::CopyFile( dwtPath, newFile, TRUE )){
         // Cannot copy file for one reason or another (if error 80 then file exists)
         DWORD dwErr = GetLastError();
         acutPrintf( "\nCannot copy template file, failed with error %d",dwErr );
         return;
      }
      // See solution 3615 if you need to clear the DBMOD system variable
      if ( /*Adesk::kFalse == */acedSyncFileOpen( newFile ))
         // Opening the newly copied file has failed/been cancelled
         ::DeleteFile( newFile );
   }
}
页: [1]
查看完整版本: [每日一码] 如何创建自己的NEW命令 [复制链接]