DSAddIn.cpp
上传用户:gddssl
上传日期:2007-01-06
资源大小:1003k
文件大小:4k
源码类别:

编辑器/阅读器

开发平台:

DOS

  1. #include "stdafx.h"
  2. #include "VisVim.h"
  3. #include "DSAddIn.h"
  4. #include "Commands.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. // This is called when the user first loads the add-in, and on start-up
  11. //  of each subsequent Developer Studio session
  12. STDMETHODIMP CDSAddIn::OnConnection (IApplication * pApp, VARIANT_BOOL bFirstTime,
  13.                    long dwCookie, VARIANT_BOOL * OnConnection)
  14. {
  15. AFX_MANAGE_STATE (AfxGetStaticModuleState ());
  16. // Store info passed to us
  17. IApplication *pApplication = NULL;
  18. if (FAILED (pApp->QueryInterface (IID_IApplication, (void **) &pApplication))
  19.     || pApplication == NULL)
  20. {
  21. *OnConnection = VARIANT_FALSE;
  22. return S_OK;
  23. }
  24. m_dwCookie = dwCookie;
  25. // Create command dispatch, send info back to DevStudio
  26. CCommandsObj::CreateInstance (&m_pCommands);
  27. m_pCommands->AddRef ();
  28. // The QueryInterface above AddRef'd the Application object.  It will
  29. // be Release'd in CCommand's destructor.
  30. m_pCommands->SetApplicationObject (pApplication);
  31. // (see stdafx.h for the definition of VERIFY_OK)
  32. VERIFY_OK (pApplication->SetAddInInfo ((long) AfxGetInstanceHandle (),
  33. (LPDISPATCH) m_pCommands, IDR_TOOLBAR_MEDIUM, IDR_TOOLBAR_LARGE,
  34. m_dwCookie));
  35. // Inform DevStudio of the commands we implement
  36. if (! AddCommand (pApplication, "VisVimDialog", "VisVimDialogCmd",
  37.   IDS_CMD_DIALOG, 0, bFirstTime))
  38. goto Error;
  39. if (! AddCommand (pApplication, "VisVimEnable", "VisVimEnableCmd",
  40.   IDS_CMD_ENABLE, 1, bFirstTime))
  41. goto Error;
  42. if (! AddCommand (pApplication, "VisVimDisable", "VisVimDisableCmd",
  43.   IDS_CMD_DISABLE, 2, bFirstTime))
  44. goto Error;
  45. if (! AddCommand (pApplication, "VisVimToggle", "VisVimToggleCmd",
  46.   IDS_CMD_TOGGLE, 3, bFirstTime))
  47. goto Error;
  48. if (! AddCommand (pApplication, "VisVimLoad", "VisVimLoadCmd",
  49.   IDS_CMD_LOAD, 4, bFirstTime))
  50. goto Error;
  51. *OnConnection = VARIANT_TRUE;
  52. return S_OK;
  53.    Error:
  54. *OnConnection = VARIANT_FALSE;
  55. return S_OK;
  56. }
  57. // This is called on shut-down, and also when the user unloads the add-in
  58. STDMETHODIMP CDSAddIn::OnDisconnection (VARIANT_BOOL bLastTime)
  59. {
  60. AFX_MANAGE_STATE (AfxGetStaticModuleState ());
  61. m_pCommands->UnadviseFromEvents ();
  62. m_pCommands->Release ();
  63. m_pCommands = NULL;
  64. return S_OK;
  65. }
  66. // Add a command to DevStudio
  67. // Creates a toolbar button for the command also.
  68. // 'MethodName' is the name of the methode specified in the .odl file
  69. // 'StrResId' the resource id of the descriptive string
  70. // 'GlyphIndex' the image index into the command buttons bitmap
  71. // Return true on success
  72. //
  73. bool CDSAddIn::AddCommand (IApplication* pApp, char* MethodName, char* CmdName,
  74.    UINT StrResId, UINT GlyphIndex, VARIANT_BOOL bFirstTime)
  75. {
  76. CString CmdString;
  77. CString CmdText;
  78. CmdText.LoadString (StrResId);
  79. CmdString = CmdName;
  80. CmdString += CmdText;
  81. CComBSTR bszCmdString (CmdString);
  82. CComBSTR bszMethod (MethodName);
  83. CComBSTR bszCmdName (CmdName);
  84. VARIANT_BOOL bRet;
  85. VERIFY_OK (pApp->AddCommand (bszCmdString, bszMethod, GlyphIndex,
  86.      m_dwCookie, &bRet));
  87. if (bRet == VARIANT_FALSE)
  88. // AddCommand failed because a command with this name already exists.
  89. return FALSE;
  90. // Add toolbar buttons only if this is the first time the add-in
  91. // is being loaded.  Toolbar buttons are automatically remembered
  92. // by Developer Studio from session to session, so we should only
  93. // add the toolbar buttons once.
  94. if (bFirstTime == VARIANT_TRUE)
  95. VERIFY_OK (pApp->AddCommandBarButton (dsGlyph, bszCmdName, m_dwCookie));
  96. return TRUE;
  97. }