SUMMINFO.CPP
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:10k
源码类别:

界面编程

开发平台:

Visual C++

  1. // summinfo.cpp : implementation of the CDrawDoc class
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12. #include "stdafx.h"
  13. #include <winnls.h>
  14. #include "drawcli.h"
  15. #ifdef _DEBUG
  16. #undef THIS_FILE
  17. static char BASED_CODE THIS_FILE[] = __FILE__;
  18. #endif
  19. #include <objbase.h>
  20. // the following header redefines
  21. // the DEFINE_GUID macro to actually allocate data
  22. #include <initguid.h>
  23. #ifndef INITGUID
  24. #define INITGUID
  25. #endif
  26. // the DEFINE_GUID macro in the following header now allocates data
  27. #include "summinfo.h"
  28. const OLECHAR szSummInfo[] = OLESTR("05SummaryInformation");
  29. #if defined(_UNICODE)
  30. #if _MFC_VER >= 0x0800
  31. #pragma warning(disable: 4996)
  32. #endif
  33. LPCSTR tcstocs(LPCTSTR lpctStr) {                       // typed char (WCHAR) to CHAR
  34. static CHAR strTemp[1024];
  35. wcstombs(strTemp, lpctStr, 1024);
  36. return strTemp;
  37. }
  38. #if _MFC_VER >= 0x0800
  39. #pragma warning(default: 4996)
  40. #endif
  41. #else // !defined(_UNICODE)
  42. #define tcstocs(lpctStr) (LPCSTR)(lpctStr)
  43. #endif
  44. CSummInfo::CSummInfo()
  45. {
  46. m_propSet.SetFormatVersion(0);
  47. DWORD dwOSVer;
  48. dwOSVer = (DWORD)MAKELONG(LOWORD(GetVersion()), 2);
  49. m_propSet.SetOSVersion(dwOSVer);
  50. m_propSet.SetClassID(FMTID_SummaryInformation);
  51. m_pSection = m_propSet.AddSection(FMTID_SummaryInformation);
  52. UINT cp = GetACP();
  53. m_pSection->Set(PID_CODEPAGE, (void*)&cp, VT_I2);
  54. SetTitle(_T(""));
  55. SetSubject(_T(""));
  56. SetAuthor(_T(""));
  57. SetKeywords(_T(""));
  58. SetComments(_T(""));
  59. SetTemplate(_T(""));
  60. SetLastAuthor(_T(""));
  61. m_pSection->Set(PIDSI_REVNUMBER, (void*)_T("0"), VT_LPSTR);
  62. FILETIME zeroTime = {0L, 0L};
  63. m_pSection->Set(PIDSI_EDITTIME, (void*)&zeroTime, VT_FILETIME);
  64. m_pSection->Set(PIDSI_LASTPRINTED, (void*)&zeroTime, VT_FILETIME);
  65. m_pSection->Set(PIDSI_LASTSAVE_DTM, (void*)&zeroTime, VT_FILETIME);
  66. m_pSection->Set(PIDSI_CREATE_DTM, (void*)&zeroTime, VT_FILETIME);
  67. SetNumPages(0);
  68. SetNumWords(0);
  69. SetNumChars(0);
  70. SetAppname(_T(""));
  71. SetSecurity(0);
  72. }
  73. BOOL CSummInfo::SetTitle(LPCTSTR szTitle)
  74. {
  75. return m_pSection->Set(PIDSI_TITLE, (void*)tcstocs(szTitle), VT_LPSTR);
  76. }
  77. CString CSummInfo::GetTitle()
  78. {
  79. return CString((LPCSTR)m_pSection->Get(PIDSI_TITLE));
  80. }
  81. BOOL CSummInfo::SetSubject(LPCTSTR szSubject)
  82. {
  83. return m_pSection->Set(PIDSI_SUBJECT,
  84. (void*)tcstocs(szSubject), VT_LPSTR);
  85. }
  86. CString CSummInfo::GetSubject()
  87. {
  88. return CString((LPCSTR)m_pSection->Get(PIDSI_SUBJECT));
  89. }
  90. BOOL CSummInfo::SetAuthor(LPCTSTR szAuthor)
  91. {
  92. return m_pSection->Set(PIDSI_AUTHOR,
  93. (void*)tcstocs(szAuthor), VT_LPSTR);
  94. }
  95. CString CSummInfo::GetAuthor()
  96. {
  97. return CString((LPCSTR)m_pSection->Get(PIDSI_AUTHOR));
  98. }
  99. BOOL CSummInfo::SetKeywords(LPCTSTR szKeywords)
  100. {
  101. return m_pSection->Set(PIDSI_KEYWORDS,
  102. (void*)tcstocs(szKeywords), VT_LPSTR);
  103. }
  104. CString CSummInfo::GetKeywords()
  105. {
  106. return CString((LPCSTR)m_pSection->Get(PIDSI_KEYWORDS));
  107. }
  108. BOOL CSummInfo::SetComments(LPCTSTR szComments)
  109. {
  110. return m_pSection->Set(PIDSI_COMMENTS,
  111. (void*)tcstocs(szComments), VT_LPSTR);
  112. }
  113. CString CSummInfo::GetComments()
  114. {
  115. return CString((LPCSTR)m_pSection->Get(PIDSI_COMMENTS));
  116. }
  117. BOOL CSummInfo::SetTemplate(LPCTSTR szTemplate)
  118. {
  119. return m_pSection->Set(PIDSI_TEMPLATE,
  120. (void*)tcstocs(szTemplate), VT_LPSTR);
  121. }
  122. CString CSummInfo::GetTemplate()
  123. {
  124. return CString((LPCSTR)m_pSection->Get(PIDSI_TEMPLATE));
  125. }
  126. BOOL CSummInfo::SetLastAuthor(LPCTSTR szLastAuthor)
  127. {
  128. return m_pSection->Set(PIDSI_LASTAUTHOR,
  129. (void*)tcstocs(szLastAuthor), VT_LPSTR);
  130. }
  131. CString CSummInfo::GetLastAuthor()
  132. {
  133. return CString((LPCSTR)m_pSection->Get(PIDSI_LASTAUTHOR));
  134. }
  135. BOOL CSummInfo::IncrRevNum()
  136. {
  137. ULONG count;
  138. __EXT_MFC_STSCANF( 
  139. (LPCTSTR)GetRevNum(), 
  140. _T("%lu"), 
  141. &count 
  142. );
  143. count++;
  144. TCHAR buff[20];
  145. __EXT_MFC_SPRINTF( 
  146. __EXT_MFC_SPRINTF_PARAM( buff, 20 ), 
  147. _T("%lu"), 
  148. count
  149. );
  150. return m_pSection->Set(PIDSI_REVNUMBER, (void*)buff, VT_LPSTR);
  151. }
  152. CString CSummInfo::GetRevNum()
  153. {
  154. return CString((LPCSTR)m_pSection->Get(PIDSI_REVNUMBER));
  155. }
  156. void CSummInfo::StartEditTimeCount()
  157. {
  158. FILETIME now;
  159. CoFileTimeNow(&now);
  160. startEdit = *(__int64*)&now;
  161. }
  162. BOOL CSummInfo::AddCountToEditTime()
  163. {
  164. FILETIME now;
  165. CoFileTimeNow(&now);
  166. __int64 currTime = *(__int64*)&now;
  167. __int64 thisSession = currTime - startEdit;
  168. __int64 lastTotal = *(__int64*)m_pSection->Get(PIDSI_EDITTIME);
  169. __int64 newTotal = lastTotal + thisSession;
  170. return m_pSection->Set(PIDSI_EDITTIME, (void*)&newTotal, VT_FILETIME);
  171. }
  172. CString CSummInfo::GetEditTime()
  173. {
  174. FILETIME now;
  175. CoFileTimeNow(&now);
  176. __int64 currTime = *(__int64*)&now;
  177. __int64 thisSession = currTime - startEdit;
  178. __int64 lastTotal = *(__int64*)m_pSection->Get(PIDSI_EDITTIME);
  179. __int64 newTotal = lastTotal + thisSession;
  180. ULONG editMinutes = (ULONG)(newTotal/600000000);
  181. TCHAR buff[20];
  182. __EXT_MFC_SPRINTF( 
  183. __EXT_MFC_SPRINTF_PARAM( buff, 20 ), 
  184. _T("%lu min"), 
  185. editMinutes
  186. );
  187. return CString(buff);
  188. }
  189. BOOL CSummInfo::RecordPrintDate()
  190. {
  191. FILETIME printDate;
  192. CoFileTimeNow(&printDate);
  193. return m_pSection->Set(PIDSI_LASTPRINTED,
  194. (void*)&printDate, VT_FILETIME);
  195. }
  196. CString CSummInfo::GetLastPrintDate()
  197. {
  198. FILETIME* pPrintDate = (FILETIME*)m_pSection->Get(PIDSI_LASTPRINTED);
  199. if ((pPrintDate == NULL) ||
  200. ((pPrintDate->dwLowDateTime == 0L) &&
  201.  (pPrintDate->dwHighDateTime == 0L)  ))
  202. return CString(_T(""));
  203. else
  204. {
  205. COleDateTime tempDate = *pPrintDate;
  206. return tempDate.Format();
  207. }
  208. }
  209. BOOL CSummInfo::RecordCreateDate()
  210. {
  211. FILETIME createDate;
  212. CoFileTimeNow(&createDate);
  213. return m_pSection->Set(PIDSI_CREATE_DTM,
  214. (void*)&createDate, VT_FILETIME);
  215. }
  216. CString CSummInfo::GetCreateDate()
  217. {
  218. FILETIME* pCreateDate = (FILETIME*)m_pSection->Get(PIDSI_CREATE_DTM);
  219. if ((pCreateDate == NULL) ||
  220. ((pCreateDate->dwLowDateTime == 0L) &&
  221.  (pCreateDate->dwHighDateTime == 0L)  ))
  222. return CString(_T(""));
  223. else
  224. {
  225. COleDateTime tempDate = *pCreateDate;
  226. return tempDate.Format();
  227. }
  228. }
  229. BOOL CSummInfo::RecordSaveDate()
  230. {
  231. FILETIME saveDate;
  232. CoFileTimeNow(&saveDate);
  233. return m_pSection->Set(PIDSI_LASTSAVE_DTM,
  234. (void*)&saveDate, VT_FILETIME);
  235. }
  236. CString CSummInfo::GetLastSaveDate()
  237. {
  238. FILETIME *pSaveDate = (FILETIME*)m_pSection->Get(PIDSI_LASTSAVE_DTM);
  239. if ((pSaveDate == NULL) ||
  240. ((pSaveDate->dwLowDateTime == 0L) &&
  241.  (pSaveDate->dwHighDateTime == 0L)  ))
  242. return CString(_T(""));
  243. else
  244. {
  245. COleDateTime tempDate = *pSaveDate;
  246. return tempDate.Format();
  247. }
  248. }
  249. BOOL CSummInfo::SetNumPages(ULONG nPages)
  250. {
  251. return m_pSection->Set(PIDSI_PAGECOUNT, (void*)&nPages, VT_I4);
  252. }
  253. CString CSummInfo::GetNumPages()
  254. {
  255. TCHAR buff[20];
  256. ULONG* pNumPages = (ULONG*)m_pSection->Get(PIDSI_PAGECOUNT);
  257. if (pNumPages != NULL)
  258. {
  259. __EXT_MFC_SPRINTF( 
  260. __EXT_MFC_SPRINTF_PARAM( buff, 20 ), 
  261. _T("%lu"), 
  262. *pNumPages
  263. );
  264. return CString(buff);
  265. }
  266. else
  267. return CString(_T(""));
  268. }
  269. BOOL CSummInfo::SetNumWords(ULONG nWords)
  270. {
  271. return m_pSection->Set(PIDSI_WORDCOUNT, (void*)&nWords, VT_I4);
  272. }
  273. CString CSummInfo::GetNumWords()
  274. {
  275. TCHAR buff[20];
  276. ULONG* pNumWords = (ULONG*)m_pSection->Get(PIDSI_WORDCOUNT);
  277. if (pNumWords != NULL)
  278. {
  279. __EXT_MFC_SPRINTF( 
  280. __EXT_MFC_SPRINTF_PARAM( buff, 20 ), 
  281. _T("%lu"), 
  282. *pNumWords
  283. );
  284. return CString(buff);
  285. }
  286. else
  287. return CString(_T(""));
  288. }
  289. BOOL CSummInfo::SetNumChars(ULONG nChars)
  290. {
  291. return m_pSection->Set(PIDSI_CHARCOUNT, (void*)&nChars, VT_I4);
  292. }
  293. CString CSummInfo::GetNumChars()
  294. {
  295. TCHAR buff[20];
  296. ULONG* pNumChars = (ULONG*)m_pSection->Get(PIDSI_CHARCOUNT);
  297. if (pNumChars != NULL)
  298. {
  299. __EXT_MFC_SPRINTF( 
  300. __EXT_MFC_SPRINTF_PARAM( buff, 20 ), 
  301. _T("%lu"), 
  302. *pNumChars
  303. );
  304. return CString(buff);
  305. }
  306. else
  307. return CString(_T(""));
  308. }
  309. BOOL CSummInfo::SetAppname(LPCTSTR szAppname)
  310. {
  311. return m_pSection->Set(PIDSI_APPNAME,
  312. (void*)tcstocs(szAppname), VT_LPSTR);
  313. }
  314. CString CSummInfo::GetAppname()
  315. {
  316. return CString((LPCSTR)m_pSection->Get(PIDSI_APPNAME));
  317. }
  318. BOOL CSummInfo::SetSecurity(ULONG nLevel)
  319. {
  320. return m_pSection->Set(PID_SECURITY, (void*)&nLevel, VT_I4);
  321. }
  322. CString CSummInfo::GetSecurity()
  323. {
  324. TCHAR buff[20];
  325. ULONG* pSecurity = (ULONG*)m_pSection->Get(PID_SECURITY);
  326. if (pSecurity != NULL)
  327. __EXT_MFC_SPRINTF( 
  328. __EXT_MFC_SPRINTF_PARAM( buff, 20 ), 
  329. _T("%lu"), 
  330. *pSecurity
  331. );
  332. return CString(buff);
  333. }
  334. else
  335. return CString(_T(""));
  336. }
  337. BOOL CSummInfo::WriteToStorage(LPSTORAGE lpRootStg)
  338. {
  339. if (lpRootStg != NULL)
  340. {
  341. LPSTREAM lpStream = NULL;
  342. if (FAILED(lpRootStg->CreateStream(szSummInfo,
  343.    STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE,
  344.    0, 0, &lpStream)))
  345. {
  346. TRACE(_T("CreateStream failedn"));
  347. return FALSE;
  348. }
  349. else
  350. {
  351. if(!m_propSet.WriteToStream(lpStream))
  352. {
  353. TRACE(_T("WriteToStream failedn"));
  354. return FALSE;
  355. }
  356. lpRootStg->Commit(STGC_DEFAULT);
  357. lpStream->Release();
  358. return TRUE;
  359. }
  360. }
  361. return FALSE;
  362. }
  363. BOOL CSummInfo::ReadFromStorage(LPSTORAGE lpRootStg)
  364. {
  365. if (lpRootStg != NULL)
  366. {
  367. LPSTREAM lpStream = NULL;
  368. if (FAILED(lpRootStg->OpenStream(szSummInfo,
  369.    NULL, STGM_SHARE_EXCLUSIVE|STGM_READ,
  370.    0, &lpStream)))
  371. {
  372. TRACE(_T("OpenStream failedn"));
  373. return FALSE;
  374. }
  375. else
  376. {
  377. if (!m_propSet.ReadFromStream(lpStream))
  378. {
  379. TRACE(_T("ReadFromStream failedn"));
  380. return FALSE;
  381. }
  382. m_pSection = m_propSet.GetSection(FMTID_SummaryInformation);
  383. lpStream->Release();
  384. return TRUE;
  385. }
  386. }
  387. return FALSE;
  388. }