XShell.cpp
上传用户:maryhy001
上传日期:2007-05-02
资源大小:2317k
文件大小:3k
源码类别:

网格计算

开发平台:

Visual C++

  1. #include "stdAfx.h"
  2. #include "xshell.h"
  3. CXShell::CXShell(){}
  4. CXShell::~CXShell(){}
  5. //////////////////////////////////////////////////////////////////////////
  6. int CALLBACK CXShell::BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
  7. {
  8. TCHAR szDir[MAX_PATH];
  9. switch(uMsg){
  10. case BFFM_INITIALIZED:
  11. if (lpData)
  12. {
  13. strcpy(szDir, strTmpPath.GetBuffer(strTmpPath.GetLength()));
  14. SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)szDir);
  15. }
  16. break;
  17. case BFFM_SELCHANGED:
  18. if (SHGetPathFromIDList((LPITEMIDLIST) lParam ,szDir))
  19. {
  20. SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir);
  21. }
  22. break;
  23. }
  24. return 0;
  25. }
  26. //@1
  27. BOOL CXShell::GetFolder(CString* strSelectedFolder,
  28.    const char* lpszTitle,
  29.    const HWND hwndOwner, 
  30.    const char* strRootFolder, 
  31.    const char* strStartFolder)
  32. {
  33. char pszDisplayName[MAX_PATH];
  34. LPITEMIDLIST lpID;
  35. BROWSEINFOA bi;
  36. bi.hwndOwner = hwndOwner;
  37. if (strRootFolder == NULL){
  38. bi.pidlRoot = NULL;
  39. }else{
  40. LPITEMIDLIST  pIdl = NULL;
  41. IShellFolder* pDesktopFolder;
  42. char          szPath[MAX_PATH];
  43. OLECHAR       olePath[MAX_PATH];
  44. ULONG         chEaten;
  45. ULONG         dwAttributes;
  46. strcpy(szPath, (LPCTSTR)strRootFolder);
  47. if (SUCCEEDED(SHGetDesktopFolder(&pDesktopFolder)))
  48. {
  49. MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szPath, -1, olePath, MAX_PATH);
  50. pDesktopFolder->ParseDisplayName(NULL, NULL, olePath, &chEaten, &pIdl, &dwAttributes);
  51. pDesktopFolder->Release();
  52. }
  53. bi.pidlRoot = pIdl;
  54. }
  55. bi.pszDisplayName = pszDisplayName;
  56. bi.lpszTitle = lpszTitle;
  57. bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
  58. bi.lpfn = BrowseCallbackProc;
  59. if (strStartFolder == NULL){
  60. bi.lParam = FALSE;
  61. }else{
  62. strTmpPath.Format("%s", strStartFolder);
  63. bi.lParam = TRUE;
  64. }
  65. bi.iImage = NULL;
  66. lpID = SHBrowseForFolderA(&bi);
  67. if (lpID != NULL){
  68. BOOL b = SHGetPathFromIDList(lpID, pszDisplayName);
  69. if (b == TRUE){
  70. strSelectedFolder->Format("%s",pszDisplayName);
  71. return TRUE;
  72. }
  73. }else{
  74. strSelectedFolder->Empty();
  75. }
  76. return FALSE;
  77. }
  78. //////////////////////////////////////////////////////////////////////////
  79. void CXShell::ShowFileProperties(const char *lpszFilename)
  80. {
  81. //open the file property window.
  82. SHELLEXECUTEINFO sei;
  83. sei.cbSize = sizeof(sei);
  84. sei.hwnd  = NULL;
  85. sei.lpDirectory = NULL;
  86. sei.lpParameters = NULL;
  87. sei.hInstApp = NULL;
  88. sei.lpIDList = NULL;
  89. sei.hProcess = NULL;
  90. sei.nShow  = SW_SHOW;
  91. sei.lpVerb = "properties";
  92. sei.lpFile = lpszFilename;
  93. sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_INVOKEIDLIST | SEE_MASK_FLAG_NO_UI | SEE_MASK_ASYNCOK;
  94. ShellExecuteEx(&sei);
  95. }