summinfo.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:10k
源码类别:

对话框与窗口

开发平台:

Visual C++

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