home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 June / VPR0106A.BIN / OLS / PREX102 / PrEx102.lzh / Src.lzh / Commands.cpp next >
C/C++ Source or Header  |  2001-02-23  |  3KB  |  121 lines

  1. // Commands.cpp : インプリメンテーション ファイル
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "ProjExp.h"
  6. #include "Commands.h"
  7. #include <shellapi.h>
  8. #include <tchar.h>
  9. #include <comdef.h>
  10. #include <string>
  11. #include "ExplorerDialog.h"
  12.  
  13. using namespace std;
  14.  
  15. #ifdef _DEBUG
  16. #define new DEBUG_NEW
  17. #undef THIS_FILE
  18. static char THIS_FILE[] = __FILE__;
  19. #endif
  20.  
  21. /////////////////////////////////////////////////////////////////////////////
  22. // CCommands
  23.  
  24. CCommands::CCommands()
  25. {
  26.     m_pApplication = NULL;
  27. }
  28.  
  29. CCommands::~CCommands()
  30. {
  31.     ASSERT (m_pApplication != NULL);
  32.     m_pApplication->Release();
  33. }
  34.  
  35. void CCommands::SetApplicationObject(IApplication* pApplication)
  36. {
  37.     // この関数は pApplication が既に AddRef されたと
  38.     // 仮定します、それは CDSAddIn が関数を呼び出す直
  39.     // 前に QueryInterface 内で行いました。
  40.     m_pApplication = pApplication;
  41. }
  42.  
  43.  
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CCommands メソッド
  46.  
  47. STDMETHODIMP CCommands::ProjExpCommandMethod() 
  48. {
  49.     AFX_MANAGE_STATE(AfxGetStaticModuleState());
  50.  
  51.     // TODO: ここをこのコマンドを実行するための実際のコードに置き換えてください。
  52.     //  Developer Studio アプリケーション オブジェクトにアクセスするために m_pApplication 
  53.     //  を、またアドインのデバッグ ビルドでエラー ストリングを確認するために VERIFY_OK
  54.     //  を使用してください。 (stdafx.h を参照してください)
  55.     IGenericProject* pActProject = NULL;
  56.     BSTR bStr;
  57.     HRESULT Result;
  58.  
  59.     //------プロジェクトインターフェースを取得する---------------------------
  60.     Result = m_pApplication->get_ActiveProject((IDispatch**)&pActProject);
  61.     if(FAILED(Result) || NULL == pActProject)
  62.     {
  63.         return(S_FALSE);
  64.     }
  65.  
  66.     //------プロジェクトのフルPathを取得する---------------------------------
  67.     Result = pActProject->get_FullName(&bStr);
  68.  
  69.     //------プロジェクトインターフェースを開放する---------------------------
  70.     pActProject->Release();
  71.  
  72.     if(FAILED(Result))
  73.     {
  74.         return(S_FALSE);
  75.     }
  76.  
  77.     //------プロジェクトのフルPathからフォルダ部分を抽出する-----------------
  78.     wstring wStr(bStr);
  79.     wStr.erase(wStr.find_last_of(L'\\'));
  80.     _bstr_t _bStr(wStr.c_str());
  81.  
  82.     //------プロジェクトのフルPathがフォルダか確認をする---------------------
  83.     DWORD Attr = ::GetFileAttributes((LPCTSTR)_bStr);
  84.     if(!(FILE_ATTRIBUTE_DIRECTORY & Attr) || 0xffffffff == Attr)
  85.     {
  86.         return(S_FALSE);
  87.     }
  88.  
  89.     //------ShellExecuteExの設定---------------------------------------------
  90.     SHELLEXECUTEINFO sei;
  91.  
  92.     ::ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));
  93.  
  94.     sei.cbSize = sizeof(SHELLEXECUTEINFO);
  95.     sei.nShow = SW_SHOWNORMAL;
  96.     sei.lpFile = (LPCTSTR)_bStr;
  97.     sei.lpVerb = 
  98.         (0x80 & ::GetKeyState(VK_SHIFT) || 0x80 & ::GetKeyState(VK_RBUTTON))?
  99.             _T("Open") : _T("explore");
  100.  
  101.     ::ShellExecuteEx(&sei);
  102.  
  103.     return(S_OK);
  104. }
  105.  
  106. STDMETHODIMP CCommands::ProjExpSpCommandMethod()
  107. {
  108.     AFX_MANAGE_STATE(AfxGetStaticModuleState())
  109.  
  110.     // TODO: この位置にインプリメント用のコードを追加してください
  111.     CExplorerDialog ExplorerDialog;
  112.     //-----------------------------------------------------------------------
  113.     //        ダイアログを表示する      
  114.     //-----------------------------------------------------------------------
  115.     m_pApplication->EnableModeless(VARIANT_FALSE);
  116.     ExplorerDialog.DoModal();
  117.     m_pApplication->EnableModeless(VARIANT_TRUE);
  118.  
  119.     return S_OK;
  120. }
  121.