Misc.h
上传用户:hy_wanghao
上传日期:2007-01-08
资源大小:279k
文件大小:4k
源码类别:

Shell编程

开发平台:

Visual C++

  1. #if !defined(AFX_MISC_H__20001226_08EE_84E5_C38A_0080AD509054__INCLUDED_)
  2. #define AFX_MISC_H__20001226_08EE_84E5_C38A_0080AD509054__INCLUDED_
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. //
  7. // Types and constants
  8. //
  9. // ADFView defined SHCONTF flag
  10. #define SHCONTF_INCLUDEDELETED 2048
  11. // Constants defining where in the shared
  12. // ImageList control the icons are placed.
  13. typedef enum
  14. {
  15.    ICON_INDEX_ROOT = 0,
  16.    ICON_INDEX_FOLDER,
  17.    ICON_INDEX_FOLDER_OPEN,
  18.    ICON_INDEX_FILE,
  19. } ICONINDEX;
  20. // Constants that tell us the order of
  21. // columns in the ListView control.
  22. typedef enum 
  23. {
  24.    COL_NAME = 0,
  25.    COL_SIZE,
  26.    COL_TYPE,
  27.    COL_TIME,
  28.    COL_ATTRIBS,
  29. } LISTVIEW_COLUMNS;
  30. // The internal tag that identifies our PIDL structure.
  31. // It's only used for debugging purposes.
  32. enum { PIDL_TAG = 0xBC };
  33. // The types of PIDL data we handle. So far, only files
  34. // and folders.
  35. typedef enum tagPIDLTYPE    
  36. {    
  37.    PT_FOLDER  = 0x01,
  38.    PT_FILE    = 0x02,
  39.    PT_UNKNOWN = 0x04,
  40. } PIDLTYPE;
  41. // Our EntryFlags enumeration. It defines additional flags
  42. // for a file/folder.
  43. // It is a bitfield.
  44. typedef enum 
  45. {
  46.    EF_DELETED = 0x00000001,   // The file is deleted
  47. } ENTRYFLAGS;
  48. // Our PIDL data structure; used through-out this
  49. // namespace extension.
  50. typedef struct tagPIDLDATA    
  51. {    
  52.    // SHITEMID 
  53.    WORD       cb;
  54.    // Type identifiers
  55.    BYTE       tag;
  56.    PIDLTYPE   type;    
  57.    // File related entries..
  58.    TCHAR      szName[MAXNAMELEN+1];
  59.    TCHAR      szComment[MAXCMMTLEN+1];
  60.    int        iDosType;
  61.    TCHAR      szType[16];
  62.    SYSTEMTIME ftTime;
  63.    DWORD      dwSize;
  64.    DWORD      dwAccess;
  65.    DWORD      dwEntryFlags;
  66. } PIDLDATA;
  67. typedef UNALIGNED PIDLDATA * LPPIDLDATA;
  68. typedef const UNALIGNED PIDLDATA * LPCPIDLDATA;
  69. #define pidl_cast(pidl) reinterpret_cast<LPCPIDLDATA>(pidl)
  70. //
  71. // Helper classes
  72. //
  73. // Stack based string buffer. Loads strings from the application resource.
  74. template<int nSize>
  75. class CResString
  76. {
  77. public:
  78.    CResString()
  79.    {
  80.       m_szStr[0] = _T('');
  81.    }
  82.    CResString(UINT ID)
  83.    {
  84.       LoadString(ID);
  85.    }
  86.    ATLINLINE void LoadString(UINT ID)
  87.    {
  88.       ::LoadString(_Module.GetResourceInstance(), ID, m_szStr, lengthof(m_szStr));
  89.    }
  90.    operator LPTSTR() const { return (LPTSTR)m_szStr; };
  91. private:
  92.    TCHAR m_szStr[nSize];
  93. };
  94. // A little hourglass helper
  95. class CWaitCursor
  96. {
  97. public:
  98.    HCURSOR m_hOrigCursor;
  99.    CWaitCursor()
  100.    {
  101.       m_hOrigCursor = ::SetCursor(::LoadCursor(0,IDC_WAIT));
  102.    }
  103.    ~CWaitCursor()
  104.    {
  105.       ::SetCursor(m_hOrigCursor);
  106.    }
  107. };
  108. //
  109. // PIDLDATA access functions
  110. //
  111. void PidlGetFullPath(LPTSTR szPath, LPCITEMIDLIST pidl, LPCTSTR cSep=_T("/"));
  112. void PidlGetName(LPTSTR szName, LPCITEMIDLIST pidl);
  113. void PidlGetFilePath(LPTSTR pstrPath, LPCITEMIDLIST pidl, LPCTSTR cSep=_T("/"));
  114. PIDLTYPE PidlGetType(LPCITEMIDLIST pidl);
  115. //
  116. // Misc functions
  117. //
  118. BOOL CreateImageLists();
  119. //
  120. // Amiga Device helper functions
  121. //
  122. HRESULT OpenAmigaDevice(LPCTSTR pstrDevPath, 
  123.                         BOOL bReadOnly, 
  124.                         LPCITEMIDLIST pidlStartFolder,
  125.                         CAdfDevice &dev, 
  126.                         CAdfVolume &vol);
  127. //
  128. // Trace functions
  129. //
  130. #ifdef _DEBUG
  131. LPTSTR DbgGetCF(CLIPFORMAT cf);
  132. LPTSTR DbgGetPidlPath(LPCITEMIDLIST pidl);
  133. LPTSTR DbgGetIID(REFIID iid);
  134. #else
  135. #define DbgGetCF
  136. #define DbgGetPidlPath
  137. #define DbgGetIID
  138. #endif
  139. #endif // !defined(AFX_MISC_H__20001226_08EE_84E5_C38A_0080AD509054__INCLUDED_)